gpt4 book ai didi

c++ - 如何将 CMake 参数转发到 ExternalProject

转载 作者:IT老高 更新时间:2023-10-28 22:41:16 34 4
gpt4 key购买 nike

我已经(大部分)成功地为 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>

理想情况下也可以。

关于如何实现这一点的任何想法?

最佳答案

经过长时间的尝试,终于在 CMake 邮件列表中(由 Don Hinton)回答了这个问题。 Fraser 的解决方案非常接近,但仍然可以传递一些特定于项目的参数,这些参数可能会导致一些不可预知的行为。

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

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

关于c++ - 如何将 CMake 参数转发到 ExternalProject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12021448/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com