Merge topic 'try_compile-config-flags'
bd581a37
try_compile: Honor CMAKE_<LANG>_FLAGS_<CONFIG> changes (#16054)82ef90fc
cmCoreTryCompile: Factor out config lookup for re-use
This commit is contained in:
commit
eae4cee0b5
|
@ -0,0 +1,7 @@
|
||||||
|
try_compile-config-flags
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
* The :command:`try_compile` command source file signature now honors
|
||||||
|
configuration-specific flags (e.g. :variable:`CMAKE_<LANG>_FLAGS_DEBUG`)
|
||||||
|
in the generated test project. Previously only the default such flags
|
||||||
|
for the current toolchain were used.
|
|
@ -294,6 +294,9 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string const tcConfig =
|
||||||
|
this->Makefile->GetSafeDefinition("CMAKE_TRY_COMPILE_CONFIGURATION");
|
||||||
|
|
||||||
// we need to create a directory and CMakeLists file etc...
|
// we need to create a directory and CMakeLists file etc...
|
||||||
// first create the directories
|
// first create the directories
|
||||||
sourceDirectory = this->BinaryDirectory.c_str();
|
sourceDirectory = this->BinaryDirectory.c_str();
|
||||||
|
@ -350,6 +353,13 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
|
||||||
cmOutputConverter::EscapeForCMake(flags?flags:"").c_str());
|
cmOutputConverter::EscapeForCMake(flags?flags:"").c_str());
|
||||||
fprintf(fout, "set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
|
fprintf(fout, "set(CMAKE_%s_FLAGS \"${CMAKE_%s_FLAGS}"
|
||||||
" ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str());
|
" ${COMPILE_DEFINITIONS}\")\n", li->c_str(), li->c_str());
|
||||||
|
static std::string const cfgDefault = "DEBUG";
|
||||||
|
std::string const cfg = !tcConfig.empty()?
|
||||||
|
cmSystemTools::UpperCase(tcConfig) : cfgDefault;
|
||||||
|
std::string const langFlagsCfg = "CMAKE_" + *li + "_FLAGS_" + cfg;
|
||||||
|
const char* flagsCfg = this->Makefile->GetDefinition(langFlagsCfg);
|
||||||
|
fprintf(fout, "set(%s %s)\n", langFlagsCfg.c_str(),
|
||||||
|
cmOutputConverter::EscapeForCMake(flagsCfg?flagsCfg:"").c_str());
|
||||||
}
|
}
|
||||||
switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0056))
|
switch(this->Makefile->GetPolicyStatus(cmPolicies::CMP0056))
|
||||||
{
|
{
|
||||||
|
@ -406,8 +416,7 @@ int cmCoreTryCompile::TryCompileCode(std::vector<std::string> const& argv,
|
||||||
std::string fname = "/" + std::string(targetName) + "Targets.cmake";
|
std::string fname = "/" + std::string(targetName) + "Targets.cmake";
|
||||||
cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile);
|
cmExportTryCompileFileGenerator tcfg(gg, targets, this->Makefile);
|
||||||
tcfg.SetExportFile((this->BinaryDirectory + fname).c_str());
|
tcfg.SetExportFile((this->BinaryDirectory + fname).c_str());
|
||||||
tcfg.SetConfig(this->Makefile->GetSafeDefinition(
|
tcfg.SetConfig(tcConfig);
|
||||||
"CMAKE_TRY_COMPILE_CONFIGURATION"));
|
|
||||||
|
|
||||||
if(!tcfg.GenerateImportFile())
|
if(!tcfg.GenerateImportFile())
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
enable_language(C)
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "-DPP_ERROR ${CMAKE_C_FLAGS_DEBUG}")
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
set(CMAKE_TRY_COMPILE_CONFIGURATION Release)
|
||||||
|
try_compile(RESULT ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src.c
|
||||||
|
OUTPUT_VARIABLE out
|
||||||
|
)
|
||||||
|
string(REPLACE "\n" "\n " out " ${out}")
|
||||||
|
if(RESULT)
|
||||||
|
message(FATAL_ERROR "try_compile passed but should have failed:\n${out}")
|
||||||
|
elseif(NOT "x${out}" MATCHES "PP_ERROR is defined")
|
||||||
|
message(FATAL_ERROR "try_compile did not fail with PP_ERROR:\n${out}")
|
||||||
|
else()
|
||||||
|
message(STATUS "try_compile with per-config flag worked as expected")
|
||||||
|
endif()
|
|
@ -21,6 +21,7 @@ run_cmake(TargetTypeInvalid)
|
||||||
run_cmake(TargetTypeStatic)
|
run_cmake(TargetTypeStatic)
|
||||||
|
|
||||||
run_cmake(CMP0056)
|
run_cmake(CMP0056)
|
||||||
|
run_cmake(CompileFlags)
|
||||||
|
|
||||||
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
if(RunCMake_GENERATOR MATCHES "Make|Ninja")
|
||||||
# Use a single build tree for a few tests without cleaning.
|
# Use a single build tree for a few tests without cleaning.
|
||||||
|
|
|
@ -1 +1,4 @@
|
||||||
int main(void) { return 0; }
|
int main(void) { return 0; }
|
||||||
|
#ifdef PP_ERROR
|
||||||
|
# error PP_ERROR is defined
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue