作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用语句的目的是什么:
add_library(<tgt> [SHARED|STATIC] IMPORTED)
target_link_libraries(<tgt> [SHARED|STATIC|...] -lncursesw)
最佳答案
您应该使用 add_library(<tgt> [SHARED|STATIC] IMPORTED)
每当您需要为 <tgt>
设置属性,例如依赖关系、编译定义、编译标志等时和/或扩展,链接到 <tgt>
的任何目标.
假设您有两个静态库; libfoobar.a
和 libraboof.a
, 其中 libfoobar.a
需要 libraboof.a
.假设这些库包含一些由 -DSOME_FEATURE
启用的功能。 .
add_library(raboof STATIC IMPORTED)
set_target_properties(raboof PROPERTIES
IMPORTED_LOCATION <path-to-libraboof.a>
INTERFACE_COMPILE_DEFINITIONS "SOME_FEATURE"
)
add_library(foobar STATIC IMPORTED)
set_target_properties(foobar PROPERTIES
IMPORTED_LOCATION <path-to-libfoobar.a>
INTERFACE_LINK_LIBRARIES raboof
)
libfoobar.a
:
add_executable(my_app main.cpp)
target_link_libraries(my_app foobar)
CMake
将确保以正确的顺序链接所有依赖项,并且在这种情况下还将附加
-DSOME_FEATURE
编译时的编译标志
my_app
.请注意,由于我们添加了
libraboof.a
作为对
libfoobar.a
的依赖项,
-DSOME_FEATURE
被添加到链接到
libfoobar.a
的任何目标中通过传递属性。
add_library(<tgt> <SHARED|STATIC> IMPORTED)
在这种情况下,您必须自己为每个目标管理任何依赖项和所需的构建选项,这很容易出错。
Config
中也经常使用这种方法-用于多组件库的模块,用于管理组件之间的依赖关系。
关于cmake - 为什么使用 add_library({tgt} IMPORTED) 与 target_link_libraries(-l {.so | .a})?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49482691/
我是一名优秀的程序员,十分优秀!