Commit 84ecbf44 authored by Brad King's avatar Brad King
Browse files

Merge branch 'revert-subdirectory-linking' into release-3.12

Merge-request: !2191
parents 890be014 0d711498
......@@ -18,7 +18,7 @@ All of them have the general form::
target_link_libraries(<target> ... <item>... ...)
The named ``<target>`` must have been created by
The named ``<target>`` must have been created in the current directory by
a command such as :command:`add_executable` or :command:`add_library` and
must not be an :ref:`ALIAS target <Alias Targets>`.
Repeated calls for the same ``<target>`` append items in the order called.
......
......@@ -82,9 +82,6 @@ Commands
:ref:`Object Libraries`. Linking to an object library uses its object
files in direct dependents and also propagates usage requirements.
* The :command:`target_link_libraries` command may now be called
to modify targets created outside the current directory.
Variables
---------
......
......@@ -365,7 +365,7 @@ bool cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
if (this->CurrentProcessingState != ProcessingKeywordLinkInterface &&
this->CurrentProcessingState != ProcessingPlainLinkInterface) {
// Find target on the LHS locally
// Assure that the target on the LHS was created in the current directory.
cmTarget* t =
this->Makefile->FindLocalNonAliasTarget(this->Target->GetName());
if (!t) {
......@@ -378,18 +378,11 @@ bool cmTargetLinkLibrariesCommand::HandleLibrary(const std::string& lib,
}
}
}
// If no local target has been found, find it in the global scope
if (!t) {
t = this->Makefile->GetGlobalGenerator()->FindTarget(
this->Target->GetName(), true);
}
if (!t) {
std::ostringstream e;
e << "Attempt to add link library \"" << lib << "\" to target \""
<< this->Target->GetName()
<< "\" which does not exist or is an alias target.";
<< "\" which is not built in this directory.";
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e.str());
return false;
}
......
......@@ -8,10 +8,7 @@ run_cmake(ImportedTarget)
run_cmake(ImportedTargetFailure)
run_cmake(MixedSignature)
run_cmake(Separate-PRIVATE-LINK_PRIVATE-uses)
run_cmake(SubDirImportedTarget)
run_cmake(SubDirTarget)
run_cmake(SubDirTarget-UNKNOWN-IMPORTED)
run_cmake(SubDirTarget-UNKNOWN-IMPORTED-GLOBAL)
run_cmake(SharedDepNotTarget)
run_cmake(StaticPrivateDepNotExported)
run_cmake(StaticPrivateDepNotTarget)
......
-- mainexeUnknownImportedGlobal: mainlib;sublib
-- mainlibUnknownImportedGlobal: mainlib;sublib
-- subexeUnknownImportedGlobal: mainlib;sublib
-- sublibUnknownImportedGlobal: mainlib;sublib
enable_language(C)
add_executable(mainexeUnknownImportedGlobal IMPORTED GLOBAL)
add_library(mainlibUnknownImportedGlobal UNKNOWN IMPORTED GLOBAL)
add_library(mainlib empty.c)
add_subdirectory(SubDirImportedTarget)
target_link_libraries(subexeUnknownImportedGlobal INTERFACE mainlib)
target_link_libraries(subexeUnknownImportedGlobal INTERFACE sublib)
get_property(subexeUnknownImportedGlobal_libs TARGET subexeUnknownImportedGlobal PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "subexeUnknownImportedGlobal: ${subexeUnknownImportedGlobal_libs}")
target_link_libraries(sublibUnknownImportedGlobal INTERFACE mainlib)
target_link_libraries(sublibUnknownImportedGlobal INTERFACE sublib)
get_property(sublibUnknownImportedGlobal_libs TARGET sublibUnknownImportedGlobal PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "sublibUnknownImportedGlobal: ${sublibUnknownImportedGlobal_libs}")
add_executable(subexeUnknownImportedGlobal IMPORTED GLOBAL)
add_library(sublibUnknownImportedGlobal UNKNOWN IMPORTED GLOBAL)
add_library(sublib ../empty.c)
target_link_libraries(mainexeUnknownImportedGlobal INTERFACE mainlib)
target_link_libraries(mainexeUnknownImportedGlobal INTERFACE sublib)
get_property(mainexeUnknownImportedGlobal_libs TARGET mainexeUnknownImportedGlobal PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "mainexeUnknownImportedGlobal: ${mainexeUnknownImportedGlobal_libs}")
target_link_libraries(mainlibUnknownImportedGlobal INTERFACE mainlib)
target_link_libraries(mainlibUnknownImportedGlobal INTERFACE sublib)
get_property(mainlibUnknownImportedGlobal_libs TARGET mainlibUnknownImportedGlobal PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "mainlibUnknownImportedGlobal: ${mainlibUnknownImportedGlobal_libs}")
-- mainexe: mainlibUnknownImportedGlobal;sublibUnknownImportedGlobal
-- subexe: mainlibUnknownImportedGlobal;sublibUnknownImportedGlobal
enable_language(C)
add_executable(mainexe empty.c)
add_library(mainlibUnknownImportedGlobal UNKNOWN IMPORTED GLOBAL)
add_subdirectory(SubDirTarget-UNKNOWN-IMPORTED-GLOBAL)
target_link_libraries(subexe mainlibUnknownImportedGlobal)
target_link_libraries(subexe sublibUnknownImportedGlobal)
get_property(subexe_libs TARGET subexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "subexe: ${subexe_libs}")
add_executable(subexe ../empty.c)
add_library(sublibUnknownImportedGlobal UNKNOWN IMPORTED GLOBAL)
target_link_libraries(mainexe mainlibUnknownImportedGlobal)
target_link_libraries(mainexe sublibUnknownImportedGlobal)
get_property(mainexe_libs TARGET mainexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "mainexe: ${mainexe_libs}")
-- mainexe: mainlibUnknownImported;sublibUnknownImported
-- subexe: mainlibUnknownImported;sublibUnknownImported
enable_language(C)
add_executable(mainexe empty.c)
add_library(mainlibUnknownImported UNKNOWN IMPORTED)
add_subdirectory(SubDirTarget-UNKNOWN-IMPORTED)
target_link_libraries(subexe mainlibUnknownImported)
target_link_libraries(subexe sublibUnknownImported)
get_property(subexe_libs TARGET subexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "subexe: ${subexe_libs}")
add_executable(subexe ../empty.c)
add_library(sublibUnknownImported UNKNOWN IMPORTED)
target_link_libraries(mainexe mainlibUnknownImported)
target_link_libraries(mainexe sublibUnknownImported)
get_property(mainexe_libs TARGET mainexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "mainexe: ${mainexe_libs}")
^CMake Error at SubDirTarget.cmake:[0-9]+ \(target_link_libraries\):
Attempt to add link library "m" to target "subexe" which is not built in
this directory.
Call Stack \(most recent call first\):
CMakeLists.txt:[0-9]+ \(include\)$
-- mainexe: mainlib;sublib
-- subexe: mainlib;sublib
enable_language(C)
add_executable(mainexe empty.c)
add_library(mainlib empty.c)
add_subdirectory(SubDirTarget)
target_link_libraries(subexe mainlib)
target_link_libraries(subexe sublib)
get_property(subexe_libs TARGET subexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "subexe: ${subexe_libs}")
target_link_libraries(subexe m)
add_executable(subexe ../empty.c)
add_library(sublib ../empty.c)
target_link_libraries(mainexe mainlib)
target_link_libraries(mainexe sublib)
get_property(mainexe_libs TARGET mainexe PROPERTY INTERFACE_LINK_LIBRARIES)
message(STATUS "mainexe: ${mainexe_libs}")
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment