scrgiorgio
2018-11-06 00:52:58 UTC
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
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