i have the following CMakeList.txt:

add_library(ImpLib SHARED IMPORTED GLOBAL)
set_property(TARGET ImpLib APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES
...)    
set_target_properties(ImpLib PROPERTIES IMPORTED_LOCATION ...)

add_library(A SHARED)
# COMMENTED! A uses ImpLib but cannot link it because some third-party
executables requires 'run-time symbol resolution' 
# target_link_libraries(A PUBLIC  ImpLib )

add_library(B SHARED)
target_link_libraries(B PUBLIC A)
# COMMENTED! B uses ImpLib but cannot link it for the same previous reason
# target_link_libraries(B PUBLIC  ImpLib )

# my executable requires ImpLib explicit/default cmake linking
add_executable(MyExe)
target_link_libraries(MyExe B)
target_link_libraries(MyExe ImpLib )

The CMake generated link order is (g++ -o .... ): "B;ImportedExtLib;A"
But in this way A cannot find symbols from ImpLib (at least using g++).

The right order is: "B;A;ImpLib"

I tried with "target_link_libraries(A INTERFACE ImpLib)" but then B will
link ImpLib

I tried "set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}
-Wl,--start-group")" but sometimes it does not work.

is it doable? Can I force the right order?





--
Sent from: http://cmake.3232098.n2.nabble.com/
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
https://cmake.org/mailman/listinfo/cmake

Reply via email to