首页 文章

将cmake更改为二进制目录

提问于
浏览
3

假设我有一个项目,我已经在.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

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

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

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

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

    但是你可以哄骗cmake在你的项目根目录中创建一个额外的帮助器makefile,在CMakeLists.txt中有一些像cmake:

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

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

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

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

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

    我没有测试过这些建议,但这里应该有足够的建议给你一般的想法 .

  • 7

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

    make -C your_build_directory
    

相关问题