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