问题描述
我正在使用CMake构建我的C ++项目。我的项目需要将main.cpp
与共享库和静态库链接。例如,
静态库:libstatic1
和libstatic2
。
共享库:libshared1
和libshared2
。
g++
命令的解决方案是:
g++ -O0 -g main.o -Wl,-Bdynamic libshared1 libshared2 -Wl,-Bstatic libstatic1 libstatic2
通过分别为共享库和静态库设置链接器选项-Bdynamic
和-Bstatic
,main.p
将能够正确地与这些库链接。
我不知道如何使用CMake。
我将target_link_options(proj PUBLIC "LINKER:-Bstatic")
和target_link_options(proj PUBLIC "LINKER:-Bshared")
设置如下:
//CMakeLists.txt
project(proj)
#settings
...
...
add_executable(proj main.cpp)
target_link_libraries(proj libshared1 libshared2)
target_link_options(proj PUBLIC "LINKER:-Bdynamic")
target_link_libraries(proj libstatic1 libstatic2)
target_link_options(proj PUBLIC "LINKER:-Bstatic")
我使用make VERBOSE=1
检查了g ++命令,它的运行不符合我的预期。
所以问题是: 如何使用CMake设置此类g ++标志?
解决方法
为什么需要这个?
您不能使用这样的东西吗?
CMakeLists.txt:
project(proj)
...
add_library(shared1 SHARED ...)
add_library(shared2 SHARED ...)
add_library(static1 STATIC ...)
add_library(static2 STATIC ...)
...
add_executable(proj main.cpp)
target_link_libraries(proj PRIVATE shared1 shared2 static1 static2)