cmake链接共享和静态库分别

问题描述

我正在使用CMake构建我的C ++项目。我的项目需要将main.cpp与共享库和静态库链接。例如,

静态库:libstatic1libstatic2。 共享库:libshared1libshared2

g++命令的解决方案是:

g++ -O0 -g main.o -Wl,-Bdynamic libshared1 libshared2 -Wl,-Bstatic libstatic1 libstatic2

通过分别为共享库和静态库设置链接器选项-Bdynamic-Bstaticmain.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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...