我(大部分)成功为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>
理想情况下也可以。
关于如何做到这一点的任何想法?
答案 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