cmake - 在 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 位置)中找到它的路径并不简单。
解决方案
推荐阅读
- python - 从数组输出中删除单引号
- java - Spark GraphX 的 DFS 性能与简单的 Java DFS 实现
- c# - 带有动态附加输入的 ASP.NET MVC 服务器端验证
- python - 使用 python 的键盘记录器
- javascript - JqxCombo 值未从 ajax 结果设置 - Vue.js
- python - 如何在pygame,python上绘制精灵?
- graphql - GraphQL 方案委托:未定义 info.mergeInfo
- c++ - 无法从 mmod 人脸检测器获取 dlib 矩形坐标
- jdbc - 不支持 Storm 简单 jdbc 映射器将数组写入 phoenix db?
- ms-access-2016 - 多 Client_ID 访问中的主键