我(大部分)成功为googletest设置了ExternalProject_Add.但是,我注意到我选择的C++编译器,构建类型等不会自动转发到ExternalProject.
我可以通过在调用ExternalProject_Add时将它添加到CMAKE_ARGS来轻松添加任何给定的标志,如下所示:
CMAKE_ARGS -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
Run Code Online (Sandbox Code Playgroud)
但是,这要求我枚举应转发给googletests的CMake调用的所有可能参数,并且该列表非常庞大.我还需要为我想要的每个其他ExternalProject_Add创建相同的列表.这似乎很脆弱,容易出错.
有没有办法告诉CMake"转发"用户提供的配置?换句话说,如果我调用CMake为:
cmake <path-to-project> -DCMAKE_C_COMPILER=/usr/bin/clang -DSOME_RANDOM_FLAG=stuff
Run Code Online (Sandbox Code Playgroud)
然后我希望我对ExternalProject_Add的调用提供相同的编译器选择和值SOME_RANDOM_FLAG,而无需显式列出这些名称.我不确定只是简单地传递CMake的ARGV会起作用,因为说
CC=/usr/bin/clang cmake <path-to-project>
Run Code Online (Sandbox Code Playgroud)
理想情况下也会有效.
有关如何实现这一点的任何想法?
经过长时间的尝试,终于在 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}
)
Run Code Online (Sandbox Code Playgroud)
链接到邮件列表线程:https : //cmake.org/pipermail/cmake/2018-January/067002.html
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           4634 次  |  
        
|   最近记录:  |