我有一个用CMake管理的庞大项目,这个项目有数百个组件,每个组件都有自己的源文件,每个组件链接到一个库列表,用 target_link_libraries(${project} some_libraries, some_other_libraries)
现在,我的目标是:
在没有实际修改任何CMakeLists.txt我希望所有项目的目标可执行文件链接到某些特定库的情况下.
有没有办法实现这个目标?由于这是一次性试用,我不想手动搜索所有CMakeLists.txt文件并修改它们(是的,这是另一种选择).只是一个注释,我从命令行编译整个项目,使用cmake(没有cmake gui).
Dav*_*son 10
这是一种技巧,但对于 C++ 项目,您可以使用CMAKE_CXX_STANDARD_LIBRARIES. 对于 C 项目,我认为您会使用CMAKE_C_STANDARD_LIRBARIES.
链接到libbar和 的C++ 示例libfoo:
cmake ... -DCMAKE_CXX_STANDARD_LIBRARIES="-lbar -lfoo"
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档:
https://cmake.org/cmake/help/v3.6/variable/CMAKE_LANG_STANDARD_LIBRARIES.html
这不适用于旧版本的 CMake;它是在 3.0 版本之后添加的。
这是一个肮脏的黑客行为,所以请仅将其用于测试。
add_executable实际上,您可以通过定义同名的函数来重载该命令。在靠近顶层的顶部执行此操作CMakeLists.txt:
function (add_executable name)
message("Added executable: " ${name})
_add_executable(${name} ${ARGN})
target_link_libraries(${name$} your_additional_lib)
endfunction()
Run Code Online (Sandbox Code Playgroud)
请注意,这_add_executable是一个内部 CMake 名称,可能会在未来的 CMake 版本中损坏。截至目前(版本 3.0),它似乎适用于所有版本。
如果需要,您可以以add_library相同的方式重载。
为了对链接的内容进行更细粒度的控制,target_link_libraries您还可以直接修改LINK_LIBRARIES和INTERFACE_LINK_LIBRARIEStarget 属性,而不是调用。
| 归档时间: |
|
| 查看次数: |
5620 次 |
| 最近记录: |