CMake和Visual Studio - 指定解决方案文件目录

Mav*_*rik 6 cmake visual-studio-2012

CMakeLists.txt为我的项目定义了一个正常工作的文件.

我使用CMake GUI生成Visual Studio项目,并且我要求在文件夹中构建二进制文件(CMAke缓存和其他东西),该文件夹Build位于同一文件夹中CMakeLists.txt.

我能够指定必须在哪里创建可执行文件和库.有没有办法指定必须在哪里创建Visual Studio解决方案文件?我想将它放在根目录中,但同时我也不想拥有CMake在Build目录中创建的所有其他文件.

CMake创建了我定义的项目,CMakeLists.txt但也创建了另外两个项目:ALL_BUILDZERO_CHECK.它们的用途是什么?我能够ZERO_CHECK通过使用命令来避免创建set_property(GLOBAL PROPERTY USE_FOLDERS On).有没有办法避免创造ALL_BUILD

Com*_*sMS 10

看起来你最近才切换到CMake,因为当我第一次开始使用CMake时,这些问题也突然出现在我脑海中.让我们按照您发布的顺序解决它们:

我使用CMake GUI生成Visual Studio项目,并且我要求在文件夹Build中构建二进制文件(CMAke缓存和其他东西),该文件夹位于CMakeLists.txt所在的文件夹中.

别.始终使用CMake 进行源外构建.我知道,当你第一次这样做时感觉很奇怪,但请相信我:一旦你习惯了它,你永远不会想要回去.

当代码和构建文件被正确分离时,使用源代码控制变得更加方便的一个事实使得这成为CMake的杀手级功能.

有没有办法指定必须在哪里创建Visual Studio解决方案文件?

你真的不应该在乎.

我明白为什么你觉得你需要完全控制如何创建解决方案和项目文件,但实际上并非如此.只需将解决方案的目标指定为源外构建的原点,并忘记生成的所有其他文件.你不必担心,而且你不想担心 - 这正是CMake应该为你照顾的那种东西.

问问自己:如果你可以手工挑选每个项目文件的位置,你会得到什么?没什么,因为机会是,你永远不会碰他们.CMake现在是你唯一的主人......

CMake创建了我在CMakeLists.txt中定义的项目,还创建了另外两个项目:ALL_BUILD和ZERO_CHECK.它们的用途是什么?我能够通过使用命令set_property(GLOBAL PROPERTY USE_FOLDERS On)来避免创建ZERO_CHECK.有没有办法避免创建ALL_BUILD?

再说一次,你真的不应该在乎.CMake定义了几个虚拟项目,这些项目对于您不想担心的某些内部巫术非常有用.起初他们看起来很奇怪,但你会比你想象的更快地习惯他们的视线.只是不要试图抛弃它们,因为它无法正常工作.如果他们的视线真的让你感到烦恼,可以考虑将它们移动到解决方案内的一个文件夹中,这样你就不必一直看着它们.

结论:CMake在几个方面与手工制作的VS解决方案不同.这需要一些人习惯,但最终会比人们担心的痛苦少得多.

  • +1,只想添加保存解决方案文件在临时文件夹中将再次提醒您生成`cmake` - >`*.sln`是单向进程,并且所有`*.sln`修改将在重新生成后丢失 (3认同)
  • 感谢您的完整答案。我得到了你的大部分观点,我必须同意他们的观点。外源构建的想法很强大。对于项目文件(对于 *.vcxproj 和 *.vcxproj.filter,每种类型分别为 3 个),我希望将解决方案文件放在不同的文件夹中的唯一原因是一天,您必须打开解决方案才能使用它。将此文件与项目文件和 CMake 内容分开会更好……但可能软链接可以解决这个问题。 (2认同)