mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 00:11:07 -06: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;
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||
this->LocalGenerator->AddConfigVariableFlags(
|
||||
@@ -195,6 +194,8 @@ void cmMakefileLibraryTargetGenerator::WriteSharedLibraryRules(bool relink)
|
||||
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
|
||||
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
||||
}
|
||||
|
||||
@@ -214,7 +215,6 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_SHARED_MODULE");
|
||||
|
||||
std::string extraFlags;
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||
this->LocalGenerator->AddConfigVariableFlags(
|
||||
@@ -233,6 +233,8 @@ void cmMakefileLibraryTargetGenerator::WriteModuleLibraryRules(bool relink)
|
||||
this->UseLWYU = this->LocalGenerator->AppendLWYUFlags(
|
||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
|
||||
this->WriteLibraryRules(linkRuleVar, extraFlags, relink);
|
||||
}
|
||||
|
||||
@@ -244,12 +246,12 @@ void cmMakefileLibraryTargetGenerator::WriteFrameworkRules(bool relink)
|
||||
cmStrCat("CMAKE_", linkLanguage, "_CREATE_MACOSX_FRAMEWORK");
|
||||
|
||||
std::string extraFlags;
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
this->LocalGenerator->AppendTargetCreationLinkFlags(
|
||||
extraFlags, this->GeneratorTarget, linkLanguage);
|
||||
this->LocalGenerator->AddConfigVariableFlags(
|
||||
extraFlags, "CMAKE_MACOSX_FRAMEWORK_LINKER_FLAGS", this->GeneratorTarget,
|
||||
cmBuildStep::Link, linkLanguage, this->GetConfigName());
|
||||
this->GetTargetLinkFlags(extraFlags, linkLanguage);
|
||||
|
||||
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_FRONTEND_VARIANT=${CMAKE_C_COMPILER_FRONTEND_VARIANT})
|
||||
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})
|
||||
set_property(TEST RunCMake.target_link_options APPEND
|
||||
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 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_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