我使用FetchContent
将谷歌测试添加到我的构建中,如下所示:
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest
GIT_TAG main
)
FetchContent_MakeAvailable(googletest)
但在我这样做之后,每次CMake需要重新运行其配置/生成步骤时,大约需要25秒。当对构建进行迭代更改时,这确实会干扰我的工作流程。
C:NSEW>cmake --build .
[0/2] Re-checking globbed directories...
[1/2] Re-running CMake...
| It takes about 20 seconds until the following output is shown |
-- Could NOT find Python (missing: Python_EXECUTABLE Interpreter)
-- Found SFML 2.5.1 in C:/install/lib/cmake/SFML
-- Configuring done
-- Generating done
-- Build files have been written to: C:/NSEW
[0/2] Re-checking globbed directories...
ninja: no work to do.
googletest有一个可选的Python依赖项,但由于没有安装Python,CMake会尝试所有可能的安装路径,这需要很长时间。CMake似乎在每次重新配置时都会进行此搜索。如何阻止CMake对我不需要的组件进行如此缓慢的搜索?
我尝试将缓存变量Python_EXECUTABLE
设置为NO
/Python-NOTFOUND
,但这似乎没有帮助。
您可以使用CMAKE_DISABLE_FIND_PACKAGE_<PackageName>
禁用任何非REQUIRED
find_package(PackageName)
命令。这个变量至少从CMake 3.0开始就存在了,所以它通常会起作用。
您可以在FetchContent_MakeAvailable
之前设置它,然后在unset()
之后设置它。否则,只需在cmake
命令行设置CMAKE_DISABLE_FIND_PACKAGE_Python=TRUE
(和/或...Python3
(。
googletest/CMake使用的FindPython
模块有一个Python_FIND_IMPLEMENTATIONS
变量,您可以进行配置。这是CMake应该寻找的Python实现的允许列表。
如果将其配置为空字符串,则不应花费任何时间搜索Python安装。
cmake -DPython_FIND_IMPLEMENTATIONS:STRING="" <build directory>