如何CMake的参数被转发到ExternalProject(How can CMake argume

2019-06-27 03:45发布

我已经(大部分)成功地建立了ExternalProject_Add为googletest。 然而,我注意到,类似的事情我选择的C ++编译器,生成类型,等不自动转发到ExternalProject。

我可以很容易地通过调用其添加到CMAKE_ARGS到ExternalProject_Add像这样添加任何给定的标志:

CMAKE_ARGS -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}

然而,这需要我列举所有的应该被转发到googletests的CMake的调用可能的参数,并将该列表是相当巨大的。 我还需要为每一个其他ExternalProject_Add我想同样的名单。 这似乎是脆弱的,容易出错。

有没有办法告诉CMake的,以“前进”用户提供沿配置? 换句话说,如果我调用CMake的为:

cmake <path-to-project> -DCMAKE_C_COMPILER=/usr/bin/clang -DSOME_RANDOM_FLAG=stuff

然后,我想我的电话,以ExternalProject_Add提供相同的编译器的选择和价值SOME_RANDOM_FLAG而无需显式地列出这些名字。 我不知道,只是沿着通过的CMake的ARGV会的工作,因为他说

CC=/usr/bin/clang cmake <path-to-project>

在理想情况下正常工作。

任何思考如何做到这一点?

Answer 1:

长时间试图数字了这一点之后,它终于在CMake的邮件列表回答(唐顿)。 弗雷泽的解决方案是非常接近,但仍可以通过,可能会导致一些不可预知的行为的一些项目的具体参数。

下正常工作。 希望这将节省的人一段时间,试图弄清楚这一点:

cmake_minimum_required(VERSION 3.1)

# MUST be done before call to 'project'
get_cmake_property(vars CACHE_VARIABLES)
foreach(var ${vars})
  get_property(currentHelpString CACHE "${var}" PROPERTY HELPSTRING)
    if("${currentHelpString}" MATCHES "No help, variable specified on the command line." OR "${currentHelpString}" STREQUAL "")
        # message("${var} = [${${var}}]  --  ${currentHelpString}") # uncomment to see the variables being processed
        list(APPEND CL_ARGS "-D${var}=${${var}}")
    endif()
endforeach()

project(SuperBuild)

include(ExternalProject)

ExternalProject_Add(ext_proj
  ...

  CMAKE_ARGS ${CL_ARGS}
)

链接到邮件列表线程: https://cmake.org/pipermail/cmake/2018-January/067002.html



Answer 2:

我不知道一个强大的方式来实现这一点,我敢肯定,有没有标准的“CMake的方式”,但我的回答类似的问题有关捕获CMake的命令行参数可以帮助你?



文章来源: How can CMake arguments be forwarded to ExternalProject
标签: c++ cmake