CMake在带有CMakeLists.txt文件夹的文件中生成VS项目文件



我正在努力学习CMake,并努力实现我习惯于使用visual studio制作的项目布局。

我想实现如下目录结构,其中.vcxproj和.sln由CMake生成

Root
CMakeLists.txt
MySolution.sln
ProjectOne
CMakeLists.txt
ProjectOne.vcxproj
someSourceFile1.h
someSourceFile1.cpp
ProjectTwo
CMakeLists.txt
ProjectTwo.vcxproj
someSourceFile2.h
someSourceFile2.cpp
Binaries
Platform
Debug
ProjectOne.exe
ProjectTwo.dll
Release
ProjectOne.exe
ProjectTwo.dll

我找到的所有教程似乎都给出了一个例子,其中的结构是这样的:

Root
Source
CMakeLists.txt
ProjectOne
CMakeLists.txt
someSourceFile1.h
someSourceFile1.cpp
ProjectTwo
CMakeLists.txt
someSourceFile2.h
someSourceFile2.cpp
Build
MySolution.sln
ProjectTwo.vcxproj
ProjectOne.vcxproj

Platform
Debug
ProjectOne.exe
ProjectTwo.dll
Release
ProjectOne.exe
ProjectTwo.dll

使用等命令

mkdir Build
cd build
CMake ..Source
CMake --Build .

值得注意的是,我没有添加生成的ALL_BUILD.vcxproj和ZERO_CHECK.vcxproj,我还没有理解我的需求。

  • CMakeList.txt中是否缺少一个执行此操作的命令
  • 我有什么理由不按自己想要的方式布置我的项目吗

在做更多的研究时,我偶然发现Visual Studio将新文件放入错误的目录这让我觉得我不能把我的dev和dist构建与CMake混合在一起。

感谢fabian的有益评论,你可以真正构建我想要的结构,并且习惯于这样做。

如果你想让它用于某些而不是其他版本,你可以让它只使用特定版本的文件夹。

project(MySolution)
cmake_minimum_required(VERSION 3.2)
# Use solution folders if I'm using VS change to whatever your dev platform is
IF(MSVC)
SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON)
ENDIF()
add_subdirectory(MyFolderName)

有了它,您的开发构建确实需要从\source文件夹调用CMake,在该文件夹中,需要从\build目录调用分发构建来分离文件。

我猜有一些方法可以使用更多的If((。。。Else((。。。Endif((在一个特定的文件夹中根据构建类型生成。

环顾四周,我认为最简单的方法可能只是将另一种脚本语言放在上面,它只会根据构建类型从不同的目录中调用cmake命令。

Windows.scriptTypeLinux.scriptType等等。

除非某个善良的灵魂能告诉我如何在CMake 中做到这一点