我需要从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