ENH: add COMPILE_FLAGS to targets
This commit is contained in:
parent
008406a96c
commit
07ef88c985
|
@ -466,12 +466,16 @@ cmXCodeObject* cmGlobalXCodeGenerator::CreateObjectReference(cmXCodeObject* ref)
|
|||
//----------------------------------------------------------------------------
|
||||
cmXCodeObject*
|
||||
cmGlobalXCodeGenerator::CreateXCodeSourceFile(cmLocalGenerator* lg,
|
||||
cmSourceFile* sf)
|
||||
cmSourceFile* sf,
|
||||
cmTarget& cmtarget)
|
||||
{
|
||||
std::string flags;
|
||||
// Add flags from source file properties.
|
||||
if(cmtarget.GetProperty("COMPILE_FLAGS"))
|
||||
{
|
||||
lg->AppendFlags(flags, cmtarget.GetProperty("COMPILE_FLAGS"));
|
||||
}
|
||||
lg->AppendFlags(flags, sf->GetProperty("COMPILE_FLAGS"));
|
||||
|
||||
cmXCodeObject* fileRef = this->CreateObject(cmXCodeObject::PBXFileReference);
|
||||
|
||||
cmXCodeObject* group = m_GroupMap[sf];
|
||||
|
@ -650,7 +654,7 @@ cmGlobalXCodeGenerator::CreateXCodeTargets(cmLocalGenerator* gen,
|
|||
i != classes.end(); ++i)
|
||||
{
|
||||
cmXCodeObject* xsf =
|
||||
this->CreateXCodeSourceFile(m_CurrentLocalGenerator, *i);
|
||||
this->CreateXCodeSourceFile(m_CurrentLocalGenerator, *i, cmtarget);
|
||||
cmXCodeObject* fr = xsf->GetObject("fileRef");
|
||||
cmXCodeObject* filetype =
|
||||
fr->GetObject()->GetObject("lastKnownFileType");
|
||||
|
|
|
@ -124,7 +124,8 @@ private:
|
|||
cmLocalGenerator* root,
|
||||
std::vector<cmLocalGenerator*>& generators);
|
||||
cmXCodeObject* CreateXCodeSourceFile(cmLocalGenerator* gen,
|
||||
cmSourceFile* sf);
|
||||
cmSourceFile* sf,
|
||||
cmTarget& cmtarget);
|
||||
void CreateXCodeTargets(cmLocalGenerator* gen, std::vector<cmXCodeObject*>&);
|
||||
void AddDependTarget(cmXCodeObject* target,
|
||||
cmXCodeObject* dependTarget);
|
||||
|
|
|
@ -617,6 +617,10 @@ cmLocalUnixMakefileGenerator3
|
|||
// Write the build rule.
|
||||
// Build the set of compiler flags.
|
||||
std::string flags;
|
||||
if(target.GetProperty("COMPILE_FLAGS"))
|
||||
{
|
||||
this->AppendFlags(flags, target.GetProperty("COMPILE_FLAGS"));
|
||||
}
|
||||
|
||||
// Add flags from source file properties.
|
||||
if (source.GetProperty("COMPILE_FLAGS"))
|
||||
|
|
|
@ -405,6 +405,12 @@ void cmLocalVisualStudio6Generator::WriteGroup(const cmSourceGroup *sg, cmTarget
|
|||
{
|
||||
compileFlags = cflags;
|
||||
}
|
||||
if(target.GetProperty("COMPILE_FLAGS"))
|
||||
{
|
||||
compileFlags += " ";
|
||||
compileFlags += target.GetProperty("COMPILE_FLAGS");
|
||||
}
|
||||
|
||||
const char* lang =
|
||||
m_GlobalGenerator->GetLanguageFromExtension((*sf)->GetSourceExtension().c_str());
|
||||
if(lang && strcmp(lang, "CXX") == 0)
|
||||
|
|
|
@ -1036,11 +1036,17 @@ void cmLocalVisualStudio7Generator::WriteGroup(const cmSourceGroup *sg, cmTarget
|
|||
std::string additionalDeps;
|
||||
|
||||
// Check for extra compiler flags.
|
||||
if(target.GetProperty("COMPILE_FLAGS"))
|
||||
{
|
||||
compileFlags += " ";
|
||||
compileFlags += target.GetProperty("COMPILE_FLAGS");
|
||||
}
|
||||
const char* cflags = (*sf)->GetProperty("COMPILE_FLAGS");
|
||||
if(cflags)
|
||||
{
|
||||
compileFlags = cflags;
|
||||
}
|
||||
compileFlags += " ";
|
||||
compileFlags += cflags;
|
||||
}
|
||||
const char* lang =
|
||||
m_GlobalGenerator->GetLanguageFromExtension((*sf)->GetSourceExtension().c_str());
|
||||
if(lang && strcmp(lang, "CXX") == 0)
|
||||
|
|
|
@ -56,7 +56,7 @@ SET_SOURCE_FILES_PROPERTIES(complex
|
|||
COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
|
||||
OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
||||
)
|
||||
|
||||
SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET complex
|
||||
SOURCE ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
|
||||
|
|
|
@ -272,6 +272,7 @@ void ForceStringUse()
|
|||
|
||||
// defined in testcflags.c
|
||||
extern "C" int TestCFlags(char* m);
|
||||
extern "C" int TestTargetCompileFlags(char* m);
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
@ -387,7 +388,12 @@ int main()
|
|||
{
|
||||
cmPassed("Call to file1 function returned 1.");
|
||||
}
|
||||
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
cmFailed("COMPILE_FLAGS did not work with SET_TARGET_PROPERTIES");
|
||||
#else
|
||||
cmPassed("COMPILE_FLAGS did work with SET_TARGET_PROPERTIES");
|
||||
#endif
|
||||
|
||||
if(file2() != 1)
|
||||
{
|
||||
cmFailed("Call to file2 function from library failed.");
|
||||
|
@ -403,6 +409,7 @@ int main()
|
|||
#endif
|
||||
std::string gen = CMAKE_GENERATOR;
|
||||
// visual studio is currently broken for c flags
|
||||
char msg[1024];
|
||||
if(gen.find("Visual") == gen.npos)
|
||||
{
|
||||
#ifdef TEST_C_FLAGS
|
||||
|
@ -410,7 +417,6 @@ int main()
|
|||
#else
|
||||
cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
|
||||
#endif
|
||||
char msg[1024];
|
||||
if(TestCFlags(msg))
|
||||
{
|
||||
cmPassed(
|
||||
|
@ -421,7 +427,15 @@ int main()
|
|||
cmFailed(msg);
|
||||
}
|
||||
}
|
||||
|
||||
if(TestTargetCompileFlags(msg))
|
||||
{
|
||||
cmPassed(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmFailed(msg);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Test ADD_DEFINITIONS
|
||||
|
||||
|
|
|
@ -1,4 +1,15 @@
|
|||
#include <string.h>
|
||||
|
||||
int TestTargetCompileFlags(char* m)
|
||||
{
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS did not work");
|
||||
return 0;
|
||||
#endif
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS worked");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int TestCFlags(char* m)
|
||||
{
|
||||
/* TEST_CXX_FLAGS should not be defined in a c file */
|
||||
|
|
|
@ -56,7 +56,7 @@ SET_SOURCE_FILES_PROPERTIES(complex
|
|||
COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
|
||||
OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
||||
)
|
||||
|
||||
SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET complex
|
||||
SOURCE ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
|
||||
|
|
|
@ -272,6 +272,7 @@ void ForceStringUse()
|
|||
|
||||
// defined in testcflags.c
|
||||
extern "C" int TestCFlags(char* m);
|
||||
extern "C" int TestTargetCompileFlags(char* m);
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
@ -387,7 +388,12 @@ int main()
|
|||
{
|
||||
cmPassed("Call to file1 function returned 1.");
|
||||
}
|
||||
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
cmFailed("COMPILE_FLAGS did not work with SET_TARGET_PROPERTIES");
|
||||
#else
|
||||
cmPassed("COMPILE_FLAGS did work with SET_TARGET_PROPERTIES");
|
||||
#endif
|
||||
|
||||
if(file2() != 1)
|
||||
{
|
||||
cmFailed("Call to file2 function from library failed.");
|
||||
|
@ -403,6 +409,7 @@ int main()
|
|||
#endif
|
||||
std::string gen = CMAKE_GENERATOR;
|
||||
// visual studio is currently broken for c flags
|
||||
char msg[1024];
|
||||
if(gen.find("Visual") == gen.npos)
|
||||
{
|
||||
#ifdef TEST_C_FLAGS
|
||||
|
@ -410,7 +417,6 @@ int main()
|
|||
#else
|
||||
cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
|
||||
#endif
|
||||
char msg[1024];
|
||||
if(TestCFlags(msg))
|
||||
{
|
||||
cmPassed(
|
||||
|
@ -421,7 +427,15 @@ int main()
|
|||
cmFailed(msg);
|
||||
}
|
||||
}
|
||||
|
||||
if(TestTargetCompileFlags(msg))
|
||||
{
|
||||
cmPassed(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmFailed(msg);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Test ADD_DEFINITIONS
|
||||
|
||||
|
|
|
@ -1,4 +1,15 @@
|
|||
#include <string.h>
|
||||
|
||||
int TestTargetCompileFlags(char* m)
|
||||
{
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS did not work");
|
||||
return 0;
|
||||
#endif
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS worked");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int TestCFlags(char* m)
|
||||
{
|
||||
/* TEST_CXX_FLAGS should not be defined in a c file */
|
||||
|
|
|
@ -56,7 +56,7 @@ SET_SOURCE_FILES_PROPERTIES(complex
|
|||
COMPILE_FLAGS "-DFILE_HAS_EXTRA_COMPILE_FLAGS"
|
||||
OBJECT_DEPENDS ${Complex_BINARY_DIR}/cmTestGeneratedHeader.h
|
||||
)
|
||||
|
||||
SET_TARGET_PROPERTIES(complex PROPERTIES COMPILE_FLAGS "-DCOMPLEX_TARGET_FLAG")
|
||||
ADD_CUSTOM_COMMAND(
|
||||
TARGET complex
|
||||
SOURCE ${Complex_SOURCE_DIR}/cmTestGeneratedHeader.h.in
|
||||
|
|
|
@ -272,6 +272,7 @@ void ForceStringUse()
|
|||
|
||||
// defined in testcflags.c
|
||||
extern "C" int TestCFlags(char* m);
|
||||
extern "C" int TestTargetCompileFlags(char* m);
|
||||
|
||||
// ======================================================================
|
||||
|
||||
|
@ -387,7 +388,12 @@ int main()
|
|||
{
|
||||
cmPassed("Call to file1 function returned 1.");
|
||||
}
|
||||
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
cmFailed("COMPILE_FLAGS did not work with SET_TARGET_PROPERTIES");
|
||||
#else
|
||||
cmPassed("COMPILE_FLAGS did work with SET_TARGET_PROPERTIES");
|
||||
#endif
|
||||
|
||||
if(file2() != 1)
|
||||
{
|
||||
cmFailed("Call to file2 function from library failed.");
|
||||
|
@ -403,6 +409,7 @@ int main()
|
|||
#endif
|
||||
std::string gen = CMAKE_GENERATOR;
|
||||
// visual studio is currently broken for c flags
|
||||
char msg[1024];
|
||||
if(gen.find("Visual") == gen.npos)
|
||||
{
|
||||
#ifdef TEST_C_FLAGS
|
||||
|
@ -410,7 +417,6 @@ int main()
|
|||
#else
|
||||
cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
|
||||
#endif
|
||||
char msg[1024];
|
||||
if(TestCFlags(msg))
|
||||
{
|
||||
cmPassed(
|
||||
|
@ -421,7 +427,15 @@ int main()
|
|||
cmFailed(msg);
|
||||
}
|
||||
}
|
||||
|
||||
if(TestTargetCompileFlags(msg))
|
||||
{
|
||||
cmPassed(msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
cmFailed(msg);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Test ADD_DEFINITIONS
|
||||
|
||||
|
|
|
@ -1,4 +1,15 @@
|
|||
#include <string.h>
|
||||
|
||||
int TestTargetCompileFlags(char* m)
|
||||
{
|
||||
#ifndef COMPLEX_TARGET_FLAG
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS did not work");
|
||||
return 0;
|
||||
#endif
|
||||
strcpy(m, "CMAKE SET_TARGET_PROPERTIES COMPILE_FLAGS worked");
|
||||
return 1;
|
||||
}
|
||||
|
||||
int TestCFlags(char* m)
|
||||
{
|
||||
/* TEST_CXX_FLAGS should not be defined in a c file */
|
||||
|
|
Loading…
Reference in New Issue