我已经(大部分)成功地为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
提供相同的编译器选择和值,* 而不 * 需要显式列出这些名称。
CC=/usr/bin/clang cmake <path-to-project>
也能很好地工作。
有什么想法吗?
3条答案
按热度按时间zwghvu4y1#
经过长时间的尝试,终于在CMake邮件列表中找到了答案(由Don欣顿提供)。Fraser的解决方案非常接近,但仍然可以传递一些项目特定的参数,这些参数可能会导致一些不可预测的行为。
下面的代码可以正常工作。希望这能为人们节省一些时间来解决这个问题:
链接到邮件列表主题:https://cmake.org/pipermail/cmake/2018-January/067002.html
vktxenjb2#
我不知道有什么健壮的方法来实现这一点,我很肯定没有标准的“CMake方法”,但是关于捕获CMake命令行参数的my answer to a similar question可能会对您有所帮助。
eaf3rand3#
1.创建一个工具链文件以包括CMake变量,例如:
1.将环境变量
CMAKE_TOOLCHAIN_FILE
设置为工具链文件1.运行
cmake
以配置根项目现在,环境变量
CMAKE_TOOLCHAIN_FILE
应该由CMake外部项目自动继承。请参阅https://cmake.org/cmake/help/latest/variable/CMAKE_TOOLCHAIN_FILE.html