2016-04-28 49 views
0

我需要從cmake中調用cmake,以便在生成項目文件之前創建二進制文件。我有以下的CMakeLists.txt從CMake調用CMake時的變量錯誤

cmake_minimum_required(VERSION 3.2) 
project(StarEngine) 

set(CMAKE_CXX_FLAGS "-std=c++11") 
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 

find_package(OpenGL REQUIRED) 
include_directories(${OPENGL_INCLUDE_DIR}) 

#copy the other cmake file into where we'd like to invoke cmake 
configure_file(deps-CMakeLists.txt deps/CMakeLists.txt) 
execute_process(COMMAND ${CMAKE_COMMAND} . WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/deps) 

#eventually binaries will be built, for now this doesn't accomplish anything 
execute_process(COMMAND ${CMAKE_COMMAND} --build . WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/deps) 

而且它的朋友,DEPS-的CMakeLists.txt,測試腳本:

set(GENERATED_DIR "test") 
MESSAGE(STATUS ${GENERATED_DIR}) 

在下面的文件結構:

Project 
    build 
    Code 
     CmakeLists.txt 
     deps-CmakeLists.txt 

不管我爲變量賦什麼,在MESSAGE中顯示時都是空白的。我想這是從cmake調用cmake導致的奇怪行爲。我還有其他一些奇怪的錯誤,但我懷疑如果我能弄清楚這個可以幫助破解它們的一個。

+0

你想實現什麼?爲什麼你將CMakeLists.txt傳遞給'configure_file'?你的問題沒有任何意義。請澄清。 – usr1234567

+0

'configure_file()'確實代替了在源代碼文件中找到的變量。只需添加'COPYONLY'選項或使用'file(COPY ...)'命令。 – Florian

+0

感謝您的額外信息。我認爲你正在嘗試做什麼,不需要'execute_process()'。只需添加依賴就足夠了。您能否在您想要使用二進制文件的地方添加'CMakeLists.txt'部分,以及在您創建它們的地方添加'deps-CMakeLists.txt'部分?更通用的方式 - 包括交叉編譯的可能性 - 在[如何指示CMake使用構建體系結構編譯器?]中進行了描述(http://stackoverflow.com/questions/36173840/how-to-instruct-cmake-使用的最集結架構編譯器)。 – Florian

回答

0

由於@Florian,問題是用變量替換,我需要添加COPYONLY選項configure_file

+0

不客氣。關於'COPYONLY'只是一件事情:它可能不會自動識別源文件中的更改。所以最好使用'@ ONLY',然後跟蹤源文件,並在更改時觸發CMake重新配置。 – Florian