重新扫描CMake并传递参数

问题描述:

我正在制作一个带有外部项目的CMAKE文件。我在这里的例子如下: CMake ExternalProject_Add() and FindPackage()重新扫描CMake并传递参数

但是,我有一个问题。当我打电话给cmake时,我使用cmake -G "MinGW Makefiles" ..。不幸的是,-G参数似乎没有传递给重新扫描目标。如何将适用的Cmake命令传递给任何重新扫描?

我觉得这是我需要改变

add_custom_target(Rescan ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS Eigen3) 

这里的线是的CMakeLists.txt:

find_package(Dep1) 

include (ExternalProject) 
ExternalProject_Add (
        Dep1 
        SVN_REPOSITORY https://svn.company.nl/svn/Dep1-trunk 
        SVN_REVISION -rHEAD 
        TIMEOUT 10 
) 

if (NOT Dep1_FOUND) 
    add_custom_target(Rescan ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} DEPENDS Dep1) 
else (NOT Dep1_FOUND) 
    add_custom_target(Rescan) 
endif (NOT Dep1_FOUND) 

#build app 
add_executable(Testapp main.cpp) 
add_dependencies(Testapp Rescan) 

if (${Dep1_FOUND}) 
    target_include_directories(Testapp PUBLIC ${Dep1_INCLUDE_DIR}) 
    target_link_libraries(Testapp ${Dep1_LIBRARY}) 
endif (${Dep1_FOUND}) 

#Install package 
install(TARGETS Testapp EXPORT ${PROJECT_NAME}Targets 
    RUNTIME DESTINATION bin 
) 

当然,只需拨打

add_custom_target(Rescan ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR} ${CMAKE_SOURCE_DIR} DEPENDS Eigen3) 

CMAKE_GENERATOR见文档变量。

+0

这有助于感谢。但是,如果有人使用-T或-A,我是否需要处理每个案例,或者是否有什么可以让我将所有内容传递给cmake? – Stewart

+1

各自的变量是'CMAKE_GENERATOR_TOOLSET'和'CMAKE_GENERATOR_PLATFORM'。 – arrowd

+0

这个答案有助于-T和-A情况,但是我还没有考虑过的情况呢?例如,如果某人传递了一个自定义的'CMAKE_INSTALL_PREFIX'会怎么样?我相信我错过了很多可能性。有没有一种通用的方式来通过一切? – Stewart