将cmake更改为二进制目录

时间:2010-01-13 23:17:24

标签: cmake

假设我有一个项目,我已经在.build目录中运行CMake:

project/
    .build/
    .src

目前我必须这样做才能运行构建:

cd .build
make

我希望能够从项目的根目录运行make,也许可以使用

make -f ./build/Makefile

但它不起作用。我得到这样的错误

make[1]: CMakeFiles/Makefile2: No such file or directory
make[1]: *** No rule to make target `CMakeFiles/Makefile2'.  Stop.
make: *** [all] Error 2

这是因为CMake生成的Makefile假定其工作目录与它所在的位置相同(.build)。

是否可以让CMake生成一个makefile,使makefile将工作目录更改为它所在的位置?

2 个答案:

答案 0 :(得分:7)

你只需要告诉make你的基目录在哪里,不需要改变cmake。

make -C your_build_directory

答案 1 :(得分:0)

另一种方法是在你想要运行的目录中创建另一个Makefile,内容如下:

all:
       cd ./build;  make $(MFLAGS)

然后你可以从顶级目录中输入“make”。

我认为没有办法让cmake生成可以从任何位置运行的Makefile。这不是通常如何使用make。

但是你可能会哄骗cmake在你的项目根目录中创建一个额外的帮助器makefile,并在CMakeLists.txt中使用如下的一些cmake:

configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY)

(如果需要,将“$ {CMAKE_SOURCE_DIR}”替换为解析为项目根目录的表达式)

您需要在源代码树中创建ProjectRootMakefile.in文件,内容如下:

all:
       cd @CMAKE_BINARY_DIR@; make $(MFLAGS)

将用作项目根Makefile的模板。 (确保在“cd”之前使用制表符,而不是空格)

我没有测试过这些建议,但这里应该有足够的概念来提供你的想法。