我想添加一个依赖到一个目标。这个依赖项是一个预编译的库。我希望能够通过在我的CMakeLists.txt
中指定像add_dep(libName)
这样的名称来获得外部依赖项。add_dep
函数应该可重用于不同的库。
我找不到任何方法来做到这一点,only for libs which are compiled during build
how would I pass the target name in a generic form here?
would be fine, but the "consumer" shouldn't have to add inc/lib dirs etc。
2条答案
按热度按时间ax6ht2ek1#
基于Some programmer dude:
在外部库
CMakeList.txt
的目录中:在“根”
CMakeList.txt
中:将
target_link_libraries(target libName)
添加到需要它的CMakeLists.txt
。xtfmy6hx2#
CMake提供了一个关于将依赖项添加到构建中的优秀教程。旧的
find_package()
用于合并本地构建的依赖项(由CMake或其他构建系统),而相对较新的(自CMake 3.11以来)FetchContent
能够下载CMake支持的源代码并在构建文件夹中构建依赖项(更像JavaScript的npm install
和package.json
)。然而,从源代码构建可能很耗时,特别是对于一些大型库,如Boost,您可能希望在诉诸源代码之前首先搜索本地构建的库。好消息是,通过将
FetchContent
和find_package()
与FetchContent_Declare()
的FIND_PACKAGE_ARGS
选项集成,您可以两全其美。这允许CMake首先尝试调用find_packge()
来满足依赖关系,然后在目标不存在的情况下从源代码构建。如果您想使用OVERRIDE_FIND_PACKAGE
选项控制依赖项的版本(或特定提交),也可以强制执行从源代码构建策略。下面是一个小的示例项目,涵盖了我经常使用的第三方库:
Eigen
和fmt
。如果您已经在本地构建了库(例如,通过macOS上的Homebrew),则与使用find_package()
一样快。文件
在一个文件夹中:
CMakeLists.txt
main.cpp
构建
1.在同一个文件夹中,创建一个
build
子文件夹:1.运行
cmake
1.运行
make