指导CMake&x27;是否每天只更新一次外部项目?
我正在努力缩短我的项目的构建时间。在我的顶层指导CMake&x27;是否每天只更新一次外部项目?,cmake,Cmake,我正在努力缩短我的项目的构建时间。在我的顶层CMakeLists.txt中,我添加了几个外部项目,例如googletest: ExternalProject_Add(googletest PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest" GIT_REPOSITORY https://github.com/google/googletest.git INSTALL_DIR "${CMAKE_BINARY_DIR}" CMAKE_
CMakeLists.txt
中,我添加了几个外部项目,例如googletest
:
ExternalProject_Add(googletest
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest"
GIT_REPOSITORY https://github.com/google/googletest.git
INSTALL_DIR "${CMAKE_BINARY_DIR}"
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}"
)
当我重新编译项目时,googletest
也会重新编译,或者至少需要15秒的时间来处理。我可以通过添加UPDATE\u命令“
来避免这种情况。然后goolgetest将不会被重新编译,构建速度将加快约15秒
理想情况下,如果本地克隆一天没有更新,googletest将进行更新。这样,我就不需要注释UPDATE\u命令“
-行来获取最新版本
有办法自动完成吗?开箱即用这是不可能的。也许您可以使用
UPDATE\u DISCONNECTED
想出一个解决方法
可能最好为CMake提交一个功能请求(并在此处共享)。我认为您的用例是有效的。只有在自上次cmake配置运行以来日期发生更改时,才可以将当前日期存储在缓存变量中并更新googletest 在上找到以下脚本中使用的“TODAY”宏 如果构建目录被更改或CMakeCache.txt被删除,缓存的日期将丢失-谷歌测试将在cmake配置/构建后更新 还请注意,仅在cmake配置步骤中比较日期。
因此,除非明确执行cmake配置或修改CMakeLists.txt,否则将跳过日期比较 回答得好!我仍然认为CMake应该提供这样的功能。请打开一个功能请求。
macro (TODAY RESULT)
if (WIN32)
execute_process(COMMAND "date" "/T" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..)/(..)/..(..).*" "\\3\\2\\1"
${RESULT} ${${RESULT}})
elseif(UNIX)
execute_process(COMMAND "date" "+%d/%m/%Y" OUTPUT_VARIABLE ${RESULT})
string(REGEX REPLACE "(..)/(..)/..(..).*" "\\3\\2\\1"
${RESULT} ${${RESULT}})
else (WIN32)
message(SEND_ERROR "date not implemented")
set(${RESULT} 000000)
endif (WIN32)
endmacro (TODAY)
TODAY(CURRENT_DATE)
message("Current date is: ${CURRENT_DATE}")
if(${PREVIOUS_CURRENT_DATE} AND ${PREVIOUS_CURRENT_DATE} STREQUAL ${CURRENT_DATE})
message("Sorry. Googletest already updated today.")
else()
message("Ok. It's first time today!")
set(PREVIOUS_CURRENT_DATE ${CURRENT_DATE} CACHE INTERNAL "Current date")
ExternalProject_Add(googletest
PREFIX "${CMAKE_CURRENT_BINARY_DIR}/googletest"
GIT_REPOSITORY https://github.com/google/googletest.git
INSTALL_DIR "${CMAKE_BINARY_DIR}"
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}"
)
endif()