Fix generation of COMPILE_DEFINITIONS in DependInfo.cmake.

As INTERFACE_COMPILE_DEFINITIONS are now possible, we can have
situations like this:

 add_library(foo ...)
 add_library(bar ...)
 target_link_libraries(foo bar)

 target_compile_definitions(bar INTERFACE SOME_DEF)

The INTERFACE_COMPILE_DEFINITIONS of bar determine how foo should be
compiled, and if they change, foo should be rebuilt.

Additionally, as of commit d1446ca7 (Append the COMPILE_DEFINITIONS
from the Makefile to all targets., 2012-09-17), we don't need to
read definitions from the makefile if we read them from the target,
so also de-duplicate the cached info.

The DependInfo for INTERFACE_INCLUDE_DIRECTORIES is already handled
correctly.
This commit is contained in:
Stephen Kelly 2013-02-07 01:49:17 +01:00
parent 655e98bf71
commit 3a298c0bf4
1 changed files with 5 additions and 22 deletions

View File

@ -1961,34 +1961,17 @@ void cmLocalUnixMakefileGenerator3
}
// Build a list of preprocessor definitions for the target.
std::vector<std::string> defines;
{
std::string defPropName = "COMPILE_DEFINITIONS_";
defPropName += cmSystemTools::UpperCase(this->ConfigurationName);
if(const char* ddefs = this->Makefile->GetProperty("COMPILE_DEFINITIONS"))
{
cmSystemTools::ExpandListArgument(ddefs, defines);
}
if(const char* cdefs = target.GetProperty("COMPILE_DEFINITIONS"))
{
cmSystemTools::ExpandListArgument(cdefs, defines);
}
if(const char* dcdefs = this->Makefile->GetProperty(defPropName.c_str()))
{
cmSystemTools::ExpandListArgument(dcdefs, defines);
}
if(const char* ccdefs = target.GetProperty(defPropName.c_str()))
{
cmSystemTools::ExpandListArgument(ccdefs, defines);
}
}
std::set<std::string> defines;
this->AppendDefines(defines, target.GetCompileDefinitions());
this->AppendDefines(defines, target.GetCompileDefinitions(
this->ConfigurationName.c_str()));
if(!defines.empty())
{
cmakefileStream
<< "\n"
<< "# Preprocessor definitions for this target.\n"
<< "SET(CMAKE_TARGET_DEFINITIONS\n";
for(std::vector<std::string>::const_iterator di = defines.begin();
for(std::set<std::string>::const_iterator di = defines.begin();
di != defines.end(); ++di)
{
cmakefileStream