diff options
author | John Biddiscombe <jbiddiscombe@skippingmouse.co.uk> | 2001-06-22 13:47:02 (GMT) |
---|---|---|
committer | John Biddiscombe <jbiddiscombe@skippingmouse.co.uk> | 2001-06-22 13:47:02 (GMT) |
commit | e1e7b8adcafed947de7845b82420634d3b302268 (patch) | |
tree | 60072901f600bfe3ed0c3ba288e7b72ff8727e04 | |
parent | 6bf0be8e134288b31b8c3bc4bebe6ed11c1b7570 (diff) | |
download | CMake-e1e7b8adcafed947de7845b82420634d3b302268.zip CMake-e1e7b8adcafed947de7845b82420634d3b302268.tar.gz CMake-e1e7b8adcafed947de7845b82420634d3b302268.tar.bz2 |
ENH: Added RemoveSource(...) to complement AddSource. New command
SOURCE_FILES_REMOVE uses it and can be used to take files out of the build
-rw-r--r-- | Source/cmMakefile.cxx | 27 | ||||
-rw-r--r-- | Source/cmMakefile.h | 5 |
2 files changed, 29 insertions, 3 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index eedeb45..acd18c8 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -164,17 +164,17 @@ void cmMakefile::Print() const { // print the class lists std::cout << "classes:\n"; - for(SourceMap::const_iterator l = m_Sources.begin(); + for(SourceMap::const_iterator l = m_Sources.begin(); l != m_Sources.end(); l++) { std::cout << " Class list named: " << l->first << std::endl; - for(std::vector<cmSourceFile>::const_iterator i = l->second.begin(); + for(std::vector<cmSourceFile>::const_iterator i = l->second.begin(); i != l->second.end(); i++) { i->Print(); } } - + std::cout << " m_Targets: "; for (cmTargets::const_iterator l = m_Targets.begin(); l != m_Targets.end(); l++) @@ -413,6 +413,27 @@ void cmMakefile::AddSource(cmSourceFile& cmfile, const char *srclist) m_Sources[srclist].push_back(cmfile); } +struct FindSrcByName : std::binary_function<cmSourceFile, cmSourceFile, bool> +{ + public: + bool operator () (const cmSourceFile &f, const cmSourceFile &test) const + { + return !stricmp(f.GetSourceName().c_str(),test.GetSourceName().c_str()); + } +}; + +void cmMakefile::RemoveSource(cmSourceFile& cmfile,const char *srclist) +{ + std::vector<cmSourceFile> &maplist = m_Sources[srclist]; + std::vector<cmSourceFile>::iterator f = + std::find_if(maplist.begin(), maplist.end(), std::bind2nd(FindSrcByName(),cmfile)); +// std::vector<cmSourceFile>::iterator f = find_if(maplist.begin(), maplist.end(), matches(srclist); + if (f!=maplist.end()) + { + maplist.erase(f); + } +} + void cmMakefile::AddCustomCommand(const char* source, const char* command, const char* commandArgs, diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index bce13ac..d430f04 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -233,6 +233,11 @@ public: void AddSource(cmSourceFile& ,const char *srcListName); /** + * Remove a class/source file from the build. + */ + void RemoveSource(cmSourceFile& ,const char *srcListName); + + /** * Add a source group for consideration when adding a new source. */ void AddSourceGroup(const char* name, const char* regex); |