我经常在大型库的调试和发布版本之间进行更改。每当我发出
cmake . -DCMAKE_BUILD_TYPE=DEBUG
或与RELEASE相同并做一个make,一切都在重新编译。我希望cmake只重新编译自上次使用给定模式构建以来更改的文件。我可以这样做,如果是的话,怎么做?
我正在使用OSX和clang。
答案 0 :(得分:3)
我认为最常见的解决方案是为每个编译模式(选项)都有独立的构建目录。
我的意思是你需要为此目的创建两个目录(如果你的源代码存储在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.cpp
和two.cpp
,它们都有调试输出。
release
选项构建:
one.o
和two.o
。one.cpp
并使用debug
重建。现在,如果CMake
仅重建已更改的文件,那么当您希望program.exe
的调试版本具有正确的调试输出时,您将会遇到这种情况,但事实并非如此,因为文件two.o
中的调试输出已被禁用上次编译选项。