我正在尝试使用FetchContent
包含一个依赖项,该依赖项是仅包含头文件的 C++ 项目。它不需要构建。但是,它包含一个构建其测试的 CMakeLists.txt 文件,并且它没有以标准方式执行。我想完全绕过 make 步骤,以免构建无关的二进制文件,也不会看到它发出的警告。
我的代码目前是:
FetchContent_Declare(
TheProject
GIT_REPOSITORY <the git repo>
GIT_TAG <the git commit>
)
FetchContent_MakeAvailable(TheProject)
这可以正确下载项目,但它会调用 make 系统,而这并不是我想要的。我可以通过将其更改为以下内容来修复此问题:
FetchContent_Declare(
TheProject
GIT_REPOSITORY <the git repo>
GIT_TAG <the git commit>
)
FetchContent_Populate(TheProject)
这有效,并且它不会调用构建系统。太棒了。但它发出一个诅咒警告,指出FetchContent_Populate
单独调用已被弃用,并将从 cmake 的未来版本中删除。有没有一种合适的方法可以在不使用弃用功能的情况下完成我想要的功能?
当前建议的解决方法是使用该
SOURCE_SUBDIR
选项并将其设置为不存在的路径。CMake gitlab 上有一个未解决的问题,可以更好地处理这种情况: https://gitlab.kitware.com/cmake/cmake/-/issues/26220
这里也讨论了: https: //discourse.cmake.org/t/prevent-fetchcontent-makeavailable-to-execute-cmakelists-txt/12704
然后您可以使用
FETCHCONTENT_BASE_DIR
来添加包含目录。例子:
注意:下面的目录
FETCHCONTENT_BASE_DIR
是小写的。这是获取内容的记录详细信息,因此应该是可靠的。请参阅https://cmake.org/cmake/help/latest/module/FetchContent.html#populating-content-without-adding-it-to-the-build