如何让cmake不删除目标文件,以便我可以在调试/发布之间快速切换?

时间:2014-06-19 15:05:48

标签: cmake

我经常在大型库的调试和发布版本之间进行更改。每当我发出

cmake . -DCMAKE_BUILD_TYPE=DEBUG

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

我正在使用OSX和clang。

1 个答案:

答案 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.cpptwo.cpp,它们都有调试输出。

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