我需要從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導致的奇怪行爲。我還有其他一些奇怪的錯誤,但我懷疑如果我能弄清楚這個可以幫助破解它們的一個。
你想實現什麼?爲什麼你將CMakeLists.txt傳遞給'configure_file'?你的問題沒有任何意義。請澄清。 – usr1234567
'configure_file()'確實代替了在源代碼文件中找到的變量。只需添加'COPYONLY'選項或使用'file(COPY ...)'命令。 – Florian
感謝您的額外信息。我認爲你正在嘗試做什麼,不需要'execute_process()'。只需添加依賴就足夠了。您能否在您想要使用二進制文件的地方添加'CMakeLists.txt'部分,以及在您創建它們的地方添加'deps-CMakeLists.txt'部分?更通用的方式 - 包括交叉編譯的可能性 - 在[如何指示CMake使用構建體系結構編譯器?]中進行了描述(http://stackoverflow.com/questions/36173840/how-to-instruct-cmake-使用的最集結架構編譯器)。 – Florian