2016-12-01 45 views
0

我正在製作一個帶有外部項目的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 
) 

回答

1

當然,只需撥打

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