2016-04-28 20 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