2016-11-17 60 views
0

我有一个CMake项目,它可以将多个Visual Studio项目生成一个解决方案。如果我对仅影响单个项目(例如,add_target_definitions)的CMake脚本进行更改并调用CMake重新生成项目,则所有项目文件(* .vcxproj)都会重写到磁盘。这会触发所有目标的重建,即使可能只有一个项目文件实际上与之不同。这大大增加了我拥有的不同配置的构建时间。CMake:只有修改才重写项目?

我想用这些不同的目标定义(例如在命令行提供的)重建只有少数项目,而不是重新编译未受影响的库。我还需要一个在编译ALL_BUILD目标时工作的解决方案,并且不会将项目拆分为多个项目(解决方案)。

是否有一个CMake选项或其他一些技巧来避免这种行为?

回答

0

事实证明,我在使用add_target_definitions的CMake脚本包含在CMakeLists.txt的顶层,因此,它下面的目录中的所有CMakeLists.txt都是它的依赖。我通过检查其中一个项目的generated.stamp.depend发现了这一点。

如果我将其分解为一个单独的脚本,该脚本只包含在需要它的项目中,则项目不再被重写。