假设我有一个项目,我已经在.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将工作目录更改为它所在的位置?
答案 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”之前使用制表符,而不是空格)
我没有测试过这些建议,但这里应该有足够的概念来提供你的想法。