diff options
-rw-r--r-- | Modules/CMakeRCInformation.cmake | 5 | ||||
-rw-r--r-- | Source/cmMakefileTargetGenerator.cxx | 29 |
2 files changed, 31 insertions, 3 deletions
diff --git a/Modules/CMakeRCInformation.cmake b/Modules/CMakeRCInformation.cmake index efc7384..dcef7ee 100644 --- a/Modules/CMakeRCInformation.cmake +++ b/Modules/CMakeRCInformation.cmake @@ -12,7 +12,10 @@ INCLUDE(Platform/${CMAKE_SYSTEM_NAME}-${CMAKE_BASE_NAME} OPTIONAL) SET (CMAKE_RC_FLAGS "$ENV{RCFLAGS} ${CMAKE_RC_FLAGS_INIT}" CACHE STRING "Flags for Fortran compiler.") - +# These are the only types of flags that should be passed to the rc +# command, if COMPILE_FLAGS is used on a target this will be used +# to filter out any other flags +SET(CMAKE_RC_FLAG_REGEX "^[-/](D|I)") # now define the following rule variables # CMAKE_RC_COMPILE_OBJECT diff --git a/Source/cmMakefileTargetGenerator.cxx b/Source/cmMakefileTargetGenerator.cxx index 28a6105..6cb5fd0 100644 --- a/Source/cmMakefileTargetGenerator.cxx +++ b/Source/cmMakefileTargetGenerator.cxx @@ -491,8 +491,33 @@ cmMakefileTargetGenerator // Add target-specific flags. if(this->Target->GetProperty("COMPILE_FLAGS")) { - this->LocalGenerator->AppendFlags - (flags, this->Target->GetProperty("COMPILE_FLAGS")); + std::string langIncludeExpr = "CMAKE_"; + langIncludeExpr += lang; + langIncludeExpr += "_FLAG_REGEX"; + const char* regex = this->Makefile-> + GetDefinition(langIncludeExpr.c_str()); + if(regex) + { + cmsys::RegularExpression r(regex); + std::vector<std::string> args; + cmSystemTools::ParseWindowsCommandLine( + this->Target->GetProperty("COMPILE_FLAGS"), + args); + for(std::vector<std::string>::iterator i = args.begin(); + i != args.end(); ++i) + { + if(r.find(i->c_str())) + { + this->LocalGenerator->AppendFlags + (flags, i->c_str()); + } + } + } + else + { + this->LocalGenerator->AppendFlags + (flags, this->Target->GetProperty("COMPILE_FLAGS")); + } } // Add flags from source file properties. |