首页 > 解决方案 > 在 CMake 中链接没有完整路径的静态系统库

问题描述

在为公共系统库构建 CMake 查找模块时libatomic,我注意到如果创建一个STATIC IMPORTED具有静态库名称的目标(即libatomic.a),然后将其添加到LINK_LIBRARIES非导入目标的名称(例如foo)中,则行为是不像预期的那样。例如通过:

add_library(Atomic::atomic STATIC IMPORTED)
set_target_properties(Atomic::atomic
    PROPERTIES
        IMPORTED_LOCATION "libatomic.a"
)

add_executable(foo)
target_link_libraries(foo
    PRIVATE
        Atomic::atomic
)

我期望的行为是在 Linux 上的链接行中添加如下内容:

-Wl,-Bstatic -latomic -Wl,-Bdynamic

或者:

-l:libatomic.a

但是,我实际看到的是,在使用Unix Makefiles生成器时,它是作为Makefile 中libatomic.a的依赖项添加的。foo此外,只是libatomic.a添加到链接线而不是所需的形式之一。有没有一种方法可以实现我的目标,而无需找到我的目标库的完整路径,例如libatomic.a

这样做的基本原理是,libatomic.a在某些特定于编译器的位置(例如在 devtoolset 位置)中找到它的路径并不简单。

标签: cmakestatic-linking

解决方案


推荐阅读