如何将CMake参数转发到ExternalProject

时间:2012-08-18 19:06:08

标签: c++ cmake

我(大部分)成功为googletest设置了ExternalProject_Add。但是,我注意到我选择的C ++编译器,构建类型等不会自动转发到ExternalProject。

我可以通过在调用ExternalProject_Add时将其添加到CMAKE_ARGS来轻松添加任何给定的标志,如下所示:

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>

理想情况下也可以。

关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:4)

我不知道实现这一目标的有效方法,而且我很确定没有标准的“CMake方式”,但my answer to a similar question关于捕获CMake命令行参数可能会对你有帮助吗?

答案 1 :(得分:2)

经过长时间的努力解决这个问题后,终于在CMake邮件列表中回答(Don Hinton)。弗雷泽的解决方案非常接近,但仍然可以传递一些可能导致某些不可预测行为的项目特定参数。

以下工作正常。希望这可以节省一些时间来解决这个问题:

exten => _X.,n,Set(CALLERID(name)=${CALLERID(num)})

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