安装ExternalProject后,请避免使用CMake子命令

时间:2015-10-05 17:25:41

标签: c++ c++11 cmake eigen3

我正在研究的项目依赖于Eigen3。以前,我只是让最终用户在配置步骤中手动指定了Eigen3标头的路径,但这变得很麻烦,我想从用户那里承担一些责任。我已经设置了一个CMake External项目来通过以下方式获取HG存储库:

message( STATUS "Looking for Eigen3 ")
find_package(Eigen3)
if(EIGEN3_FOUND)
  message( STATUS "Looking for Eigen3 - found!")
else()
  find_file(EIGEN3_IN_DEPS Eigen/Core ${PROJECT_BINARY_DIR}/deps/include/eigen3)
  if(NOT EIGEN3_IN_DEPS)
    message( STATUS "Looking for Eigen3 - not found!")
    ExternalProject_Add(eigen3
      PREFIX "${PROJECT_BINARY_DIR}/deps/eigen3"
      HG_REPOSITORY "https://bitbucket.org/eigen/eigen"
      CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${PROJECT_BINARY_DIR}/deps"
      "-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}"
      "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
      UPDATE_DISCONNECTED 1)
  endif()
endif()

我遇到的问题是,现在我的CMake生成的Makefile 总是 每次重新编译我的问题时都会运行Eigen3配置步骤。当然,对于最终用户而言,这通常不是问题,只有开发人员。我每次重新编译时都不必等待这个配置,有没有办法指定我应该尝试从HG Repo配置Eigen3的唯一时间是初始构建?

1 个答案:

答案 0 :(得分:1)

一个明显的,如果不太理想的答案:再次运行CMake。第一次运行CMake和构建时,将获取,配置和构建Eigen3。当第二次运行CMake时,find_package将定位Eigen3,生成的Makefile将不需要配置和构建Eigen3。这假设ExternalProject_Add将Eigen3放在find_package将找到的位置,这可以通过在these guidelines之后将CigenKREFIX_PATH添加到您的CMAKE_PREFIX_PATH来实现。

虽然我对“再次运行”的答案感到畏缩,但在这种情况下并没有那么糟糕。不需要再次运行cmake,并且您的构建将始终按预期第一次运行。第二次调用是优化。