我有一个核心库,分支到其他几个库.在CMakeLists.txt中它看起来有点像这样
ADD_LIBRARY (core ...)
ADD_LIBRARY (branch1 ...)
ADD_LIBRARY (branch2 ...)
...
TARGET_LINK_LIBRARIES (branch1 core)
TARGET_LINK_LIBRARIES (branch2 core)
...
Run Code Online (Sandbox Code Playgroud)
我有一些可执行文件可能依赖于任何或所有分支.对于那些依赖所有分支而不是写作的人
ADD_EXECUTABLE (foo ...)
TARGET_LINK_LIBRARIES (foo branch1 branch2 ...)
Run Code Online (Sandbox Code Playgroud)
我试过了
ADD_LIBRARY (all-branches)
TARGET_LINK_LIBRARIES (all-branches branch1 branch2 ...)
Run Code Online (Sandbox Code Playgroud)
然后
TARGET_LINK_LIBRARIES (foo all-branches)
Run Code Online (Sandbox Code Playgroud)
这有效,但CMake吐出警告.
You have called ADD_LIBRARY for library all-branches without any source files. This typically indicates a problem with your CMakeLists.txt file
Run Code Online (Sandbox Code Playgroud)
我理解这条消息,但这不是错误.CMake认为构建这样的元库是一种可接受的方式吗?
ste*_*ire 11
我在即将推出的CMake 3.0.0版本中添加了一种新类型的库,即INTERFACE库.这被设计为解决此问题的方法:
http://www.cmake.org/cmake/help/git-master/manual/cmake-buildsystem.7.html#interface-libraries
add_library(all_branches INTERFACE)
target_link_libraries(all_branches INTERFACE branch1 branch2)
add_executable(myexe ...)
target_link_libraries(myexe all_branches)
Run Code Online (Sandbox Code Playgroud)
在 CMAKE 中,add_executable 和 add_library 非常相似。他们只是告诉 CMAKE 它应该根据您在库/可执行文件名称和选项(例如 SHARED 等)之后提供的 src 文件列表为库或可执行文件创建 MAKE 指令。
您可以做的是将要链接的库的名称添加到您增加的名称变量中,例如
SET(TARGET_LIBS ${TARGET_LIBS} myFirstLib)
SET(TARGET_LIBS ${TARGET_LIBS} myNextLib)
Run Code Online (Sandbox Code Playgroud)
然后简单地:
target_link_libraries(myExe ${TARGET_LIBS})
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以轻松定义不同子项目可能需要的库组,而无需创建元库。
| 归档时间: |
|
| 查看次数: |
5595 次 |
| 最近记录: |