mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-27 01:19:31 -05:00
Makefiles: Position target-wide link flags consistently with other generators
In particular, the `LINK_OPTIONS` target property was not placed on link lines consistently with other generators. Fixes: #27326
This commit is contained in:
@@ -176,7 +176,6 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string extraFlags;
|
std::string extraFlags;
|
||||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
|
||||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||||
this->LocalGenerator->AddConfigVariableFlags(
|
this->LocalGenerator->AddConfigVariableFlags(
|
||||||
@@ -195,6 +194,8 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
|
|||||||
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
||||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||||
|
|
||||||
|
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||||
|
|
||||||
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -214,7 +215,6 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
|
|||||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_SHARED_MODULE");
|
cmStrCat("CMAKE_", linkLanguage, "_CREATE_SHARED_MODULE");
|
||||||
|
|
||||||
std::string extraFlags;
|
std::string extraFlags;
|
||||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
|
||||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||||
this->LocalGenerator->AddConfigVariableFlags(
|
this->LocalGenerator->AddConfigVariableFlags(
|
||||||
@@ -233,6 +233,8 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
|
|||||||
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
||||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||||
|
|
||||||
|
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||||
|
|
||||||
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -244,12 +246,12 @@ void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
|
|||||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_MACOSX_FRAMEWORK");
|
cmStrCat("CMAKE_", linkLanguage, "_CREATE_MACOSX_FRAMEWORK");
|
||||||
|
|
||||||
std::string extraFlags;
|
std::string extraFlags;
|
||||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
|
||||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||||
this->LocalGenerator->AddConfigVariableFlags(
|
this->LocalGenerator->AddConfigVariableFlags(
|
||||||
extraFlags, "CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS", this->GeneratorTarget,
|
extraFlags, "CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS", this->GeneratorTarget,
|
||||||
cmBuildStep::Link, linkLanguage, this->GetConfigName());
|
cmBuildStep::Link, linkLanguage, this->GetConfigName());
|
||||||
|
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||||
|
|
||||||
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1014,7 +1014,8 @@ add_RunCMake_test(target_link_libraries-LINKER-prefix -DCMAKE_SYSTEM_NAME=${CMAK
|
|||||||
-DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
|
-DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
|
||||||
-DCMAKE_C_COMPILER_FRONTEND_VARIANT=${CMAKE_C_COMPILER_FRONTEND_VARIANT})
|
-DCMAKE_C_COMPILER_FRONTEND_VARIANT=${CMAKE_C_COMPILER_FRONTEND_VARIANT})
|
||||||
add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
|
add_RunCMake_test(add_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID})
|
||||||
add_RunCMake_test(target_link_options -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
|
add_RunCMake_test(target_link_options -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
|
||||||
|
-DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
|
||||||
-DCMake_TEST_CUDA=${CMake_TEST_CUDA})
|
-DCMake_TEST_CUDA=${CMake_TEST_CUDA})
|
||||||
set_property(TEST RunCMake.target_link_options APPEND
|
set_property(TEST RunCMake.target_link_options APPEND
|
||||||
PROPERTY LABELS "CUDA")
|
PROPERTY LABELS "CUDA")
|
||||||
|
|||||||
@@ -32,6 +32,18 @@ if (NOT CMAKE_C_COMPILER_ID STREQUAL "Intel")
|
|||||||
run_cmake_target(LINK_OPTIONS exe LinkOptions_exe --config Release)
|
run_cmake_target(LINK_OPTIONS exe LinkOptions_exe --config Release)
|
||||||
run_cmake_target(LINK_OPTIONS dollar-option LinkOptions_dollar_exe --config Release)
|
run_cmake_target(LINK_OPTIONS dollar-option LinkOptions_dollar_exe --config Release)
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_NAME MATCHES "(Linux|Darwin)" AND
|
||||||
|
RunCMake_GENERATOR MATCHES "(Ninja|Makefiles)")
|
||||||
|
|
||||||
|
run_cmake(position_LINK_OPTIONS)
|
||||||
|
|
||||||
|
run_cmake_target(position_LINK_OPTIONS shared LinkOptions_shared ${VERBOSE})
|
||||||
|
run_cmake_target(position_LINK_OPTIONS module LinkOptions_module ${VERBOSE})
|
||||||
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
run_cmake_target(position_LINK_OPTIONS framework LinkOptions_framework ${VERBOSE})
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
run_cmake(genex_LINK_LANGUAGE)
|
run_cmake(genex_LINK_LANGUAGE)
|
||||||
|
|
||||||
run_cmake_target(genex_LINK_LANGUAGE interface LinkOptions_shared_interface --config Release)
|
run_cmake_target(genex_LINK_LANGUAGE interface LinkOptions_shared_interface --config Release)
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
|
||||||
|
set (RunCMake_TEST_FAILED "options order is not respected.")
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.*
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
|
||||||
|
set (RunCMake_TEST_FAILED "options order is not respected.")
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.*
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
if (NOT actual_stdout MATCHES "BADFLAG_GLOBAL(\.[a-z]+)? +(-)?BADFLAG_PRIVATE")
|
||||||
|
set (RunCMake_TEST_FAILED "options order is not respected.")
|
||||||
|
endif()
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
.*
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
enable_language(C)
|
||||||
|
|
||||||
|
set(obj "${CMAKE_C_OUTPUT_EXTENSION}")
|
||||||
|
if(BORLAND)
|
||||||
|
set(pre -)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_VERBOSE_MAKEFILE TRUE)
|
||||||
|
set(CMAKE_C_USE_RESPONSE_FILE_FOR_LIBRARIES FALSE)
|
||||||
|
|
||||||
|
# shared configuration
|
||||||
|
string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
|
||||||
|
add_library(LinkOptions_shared SHARED LinkOptionsLib.c)
|
||||||
|
target_link_options(LinkOptions_shared PRIVATE ${pre}BADFLAG_PRIVATE${obj})
|
||||||
|
|
||||||
|
# module configuration
|
||||||
|
string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
|
||||||
|
add_library(LinkOptions_module MODULE LinkOptionsLib.c)
|
||||||
|
target_link_options(LinkOptions_module PRIVATE ${pre}BADFLAG_PRIVATE${obj})
|
||||||
|
|
||||||
|
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
# framework configuration
|
||||||
|
string(APPEND CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS " ${pre}BADFLAG_GLOBAL${obj}")
|
||||||
|
add_library(LinkOptions_framework SHARED LinkOptionsLib.c)
|
||||||
|
set_property(TARGET LinkOptions_framework PROPERTY FRAMEWORK TRUE)
|
||||||
|
target_link_options(LinkOptions_framework PRIVATE ${pre}BADFLAG_PRIVATE${obj})
|
||||||
|
endif()
|
||||||
Reference in New Issue
Block a user