指导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()