Define LINK_DEPENDS target property (#11406)
Custom Makefile link rules may need to depend on linker scripts. Define this property to allow user-specified link-time dependencies.
This commit is contained in:
parent
07cfa57ec5
commit
95f149e61f
|
@ -1534,6 +1534,13 @@ void cmMakefileTargetGenerator
|
|||
{
|
||||
depends.push_back(*obj);
|
||||
}
|
||||
|
||||
// Add user-specified dependencies.
|
||||
if(const char* linkDepends =
|
||||
this->Target->GetProperty("LINK_DEPENDS"))
|
||||
{
|
||||
cmSystemTools::ExpandListArgument(linkDepends, depends);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -531,6 +531,18 @@ void cmTarget::DefineProperties(cmake *cm)
|
|||
"Use the MAP_IMPORTED_CONFIG_<CONFIG> property to map imported "
|
||||
"configurations explicitly.");
|
||||
|
||||
cm->DefineProperty
|
||||
("LINK_DEPENDS", cmProperty::TARGET,
|
||||
"Additional files on which a target binary depends for linking.",
|
||||
"Specifies a semicolon-separated list of full-paths to files on which "
|
||||
"the link rule for this target depends. "
|
||||
"The target binary will be linked if any of the named files is newer "
|
||||
"than it."
|
||||
"\n"
|
||||
"This property is ignored by non-Makefile generators. "
|
||||
"It is intended to specify dependencies on \"linker scripts\" for "
|
||||
"custom Makefile link rules.");
|
||||
|
||||
cm->DefineProperty
|
||||
("LINK_INTERFACE_LIBRARIES", cmProperty::TARGET,
|
||||
"List public interface libraries for a shared library or executable.",
|
||||
|
|
|
@ -34,6 +34,12 @@ if(WIN32 AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Intel")
|
|||
set(_cmake_options "-DCMAKE_EXE_LINKER_FLAGS=")
|
||||
endif()
|
||||
|
||||
if("${CMAKE_GENERATOR}" MATCHES "Make")
|
||||
set(TEST_LINK_DEPENDS ${BuildDepends_BINARY_DIR}/Project/linkdep.txt)
|
||||
file(WRITE ${TEST_LINK_DEPENDS} "1")
|
||||
endif()
|
||||
list(APPEND _cmake_options "-DTEST_LINK_DEPENDS=${TEST_LINK_DEPENDS}")
|
||||
|
||||
file(MAKE_DIRECTORY ${BuildDepends_BINARY_DIR}/Project)
|
||||
message("Creating Project/foo.cxx")
|
||||
write_file(${BuildDepends_BINARY_DIR}/Project/foo.cxx
|
||||
|
@ -131,6 +137,10 @@ file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_dir.hxx
|
|||
file(WRITE ${BuildDepends_BINARY_DIR}/Project/zot_macro_tgt.hxx
|
||||
"static const char* zot_macro_tgt = \"zot_macro_tgt changed\";\n")
|
||||
|
||||
if(TEST_LINK_DEPENDS)
|
||||
file(WRITE ${TEST_LINK_DEPENDS} "2")
|
||||
endif()
|
||||
|
||||
help_xcode_depends()
|
||||
|
||||
message("Building project second time")
|
||||
|
@ -194,3 +204,16 @@ if("${out}" STREQUAL "${VALUE_CHANGED}")
|
|||
else("${out}" STREQUAL "${VALUE_CHANGED}")
|
||||
message(SEND_ERROR "Project did not rebuild properly!")
|
||||
endif("${out}" STREQUAL "${VALUE_CHANGED}")
|
||||
|
||||
if(TEST_LINK_DEPENDS)
|
||||
set(linkdep ${BuildDepends_BINARY_DIR}/Project/linkdep${CMAKE_EXECUTABLE_SUFFIX})
|
||||
if(${linkdep} IS_NEWER_THAN ${TEST_LINK_DEPENDS})
|
||||
message("LINK_DEPENDS worked")
|
||||
else()
|
||||
message(SEND_ERROR "LINK_DEPENDS failed. Executable
|
||||
${linkdep}
|
||||
is not newer than dependency
|
||||
${TEST_LINK_DEPENDS}
|
||||
")
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
@ -80,3 +80,8 @@ set_property(
|
|||
DIRECTORY
|
||||
PROPERTY IMPLICIT_DEPENDS_INCLUDE_TRANSFORM "ZOT_DIR(%)=<zot_%_dir.hxx>"
|
||||
)
|
||||
|
||||
if(TEST_LINK_DEPENDS)
|
||||
add_executable(linkdep linkdep.cxx)
|
||||
set_property(TARGET linkdep PROPERTY LINK_DEPENDS ${TEST_LINK_DEPENDS})
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
int main()
|
||||
{
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue