LINK_LIBRARY:feature causes INTERFACE_LINK_LIBRARIES_DIRECT to be linked with that feature
Original discussion: https://discourse.cmake.org/t/link-library-whole-archive-affects-interface-link-libraries-direct-is-that-intentional/9420
Given the following minimal project:
cmake_minimum_required(VERSION 3.25)
project(watest)
add_library(lib1 STATIC lib1.cpp)
add_library(lib2 STATIC lib2.cpp)
#target_link_libraries(lib2 PRIVATE lib1) # case 1: <-- use this OR the line below ONLY
set_property(TARGET lib2 PROPERTY INTERFACE_LINK_LIBRARIES_DIRECT lib1) # case 2: <-- use this OR the line above ONLY
add_executable(app main.cpp)
target_link_libraries(app PRIVATE $<LINK_LIBRARY:WHOLE_ARCHIVE,lib2>)
Using case 1: target_link_libraries(lib2 PRIVATE lib1)
it works normally as expected, link line from compiling:
link.exe ... /WHOLEARCHIVE:Debug\lib2.lib Debug\lib1.lib ...
However using case 2: set_property(TARGET lib2 PROPERTY INTERFACE_LINK_LIBRARIES_DIRECT lib1)
, and comment case 1 of course, then I get:
link.exe ... /WHOLEARCHIVE:Debug\lib1.lib /WHOLEARCHIVE:Debug\lib2.lib ...
Now lib1.lib
also gets WHOLEARCHIVE
-d, even though it’s not specified anywhere as such.
A reply from the discussion indicates that this is a bug.
Edited by Brad King