【问题标题】:cmake link shared and static library individuallycmake分别链接共享和静态库
【发布时间】:2020-12-17 21:50:11
【问题描述】:

我正在使用 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++ 标志?

【问题讨论】:

    标签: c++ cmake cuda linker g++


    【解决方案1】:

    你为什么需要这个?

    你不能用这样的东西吗?

    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)
    

    【讨论】:

      猜你喜欢
      • 2015-10-08
      • 2020-04-27
      • 1970-01-01
      • 2018-03-18
      • 1970-01-01
      • 2016-12-06
      • 2013-10-09
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多