【问题标题】:How can I make cmake not to delete object files so that I could quickly change between debug/release?如何让 cmake 不删除目标文件,以便我可以在调试/发布之间快速切换?
【发布时间】:2014-06-19 15:05:48
【问题描述】:

我经常在大型库的调试和发布版本之间切换。每当我发出一个

cmake . -DCMAKE_BUILD_TYPE=DEBUG

或者同样使用 RELEASE 并做一个 make,一切都在重新编译。我希望 cmake 仅重新编译自上次使用给定模式构建以来更改的文件。我可以这样做吗?如果可以,该怎么做?

我正在使用 OSX 和 clang。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    我相信最常见的解决方案是为每种编译模式(选项)设置独立的构建目录。

    我的意思是你需要为此创建两个目录(如果你的源代码存储在ProjectSrc):

    ProjectSrc  
    └── CMakeList.txt  
    ProjectBuild_Debug  
    ProjectBuild_Release  
    

    ProjectBuild_Debug里面你需要打电话:

    cmake -DCMAKE_BUILD_TYPE=Debug ../ProjectSrc

    ProjectBuild_Release 里面你需要打电话:

    cmake -DCMAKE_BUILD_TYPE=Release ../ProjectSrc

    现在您可以重新编译任何类型的程序,并且只会重新编译已更改的文件。

    everything is recompiling - 一切都在重新编译,因为每个文件都必须使用指定的编译器选项进行编译,这是必要的。

    一起来看看吧。例如我们的项目,构建可执行文件program.exe由两个源文件组成:one.cpptwo.cpp,它们都有调试输出。

    1. 您使用release 选项构建: one.otwo.o
    2. 您更改文件 one.cpp 并使用 debug 重建。现在,如果CMake 重建只更改了文件,您会遇到这样的情况:您期望program.exe 的调试版本具有正确的调试输出,但事实并非如此,因为文件two.o 中的调试输出根据上次编译选项被禁用。

    【讨论】:

    • 如果我不需要,我真的不想更改构建目录,但我认为更改目标文件的目录就足够了。哪个选项可以做到这一点?
    • 很抱歉我的英语很糟糕。我不太清楚你的问题。你想将目标文件存储在不同的目录中,但在同一个地方构建可执行文件吗?
    • 是的。可执行文件应该在它原来的位置(它是一个库,在构建后由脚本复制到其他地方)。
    • 不幸的是我不知道如何实现这个目标。我觉得你需要声明自定义CMake 指令add_custom_commandThis question looks like related.
    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2011-03-04
    • 2017-05-07
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2016-03-20
    相关资源
    最近更新 更多