You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CMake复刻Visual Studio式C语言库跨平台构建目录结构?

实现CMake与Visual Studio风格分离式构建目录结构

选择CMake作为跨平台构建工具是完全合理的,针对你在意的缓存文件污染和自定义目录结构需求,通过CMake的源码外构建+路径配置就能完美复刻你想要的Visual Studio风格目录。

核心方案思路

  1. 采用源码外构建:不在源码目录执行CMake命令,而是在Builds目录下为Debug/Release分别创建独立的构建子目录,缓存文件会被隔离在各自的构建子目录中,不会污染源码。
  2. 通过CMake变量和目标属性,强制指定中间编译文件(.o等)输出到Inter目录,最终构建产物(exe/库)输出到对应Debug/Release的子目录下。

具体实现步骤

1. 确认初始目录结构

确保你的目录和需求一致:

SolutionDir/
├── ProjectName/
│   └── Source/
│       ├── lib.h
│       └── lib.c
└── Builds/  # 手动创建这个目录即可,子目录CMake会自动生成

2. 编写CMakeLists.txt

在ProjectName目录下创建CMakeLists.txt,内容如下:

cmake_minimum_required(VERSION 3.10)
project(ProjectName C)

# 收集源码文件(根据实际情况调整,也可以手动指定)
file(GLOB_RECURSE SOURCES Source/*.c Source/*.h)

# 生成目标:如果是库就用add_library,这里以可执行文件为例
add_executable(${PROJECT_NAME} ${SOURCES})

# 配置最终产物输出路径(对应Builds/Debug/ProjectName和Release/ProjectName)
foreach(config DEBUG RELEASE)
    # 针对不同配置设置输出目录
    set_target_properties(${PROJECT_NAME} PROPERTIES
        # 中间编译文件(.o/.obj)输出到Inter对应目录
        COMPILE_OUTPUT_DIRECTORY_${config} "${CMAKE_SOURCE_DIR}/../Builds/Inter/${config}"
        # 最终可执行文件/库输出到对应配置的ProjectName子目录
        RUNTIME_OUTPUT_DIRECTORY_${config} "${CMAKE_SOURCE_DIR}/../Builds/${config}/${PROJECT_NAME}"
        ARCHIVE_OUTPUT_DIRECTORY_${config} "${CMAKE_SOURCE_DIR}/../Builds/${config}/${PROJECT_NAME}"
        LIBRARY_OUTPUT_DIRECTORY_${config} "${CMAKE_SOURCE_DIR}/../Builds/${config}/${PROJECT_NAME}"
    )
endforeach()

3. 执行构建命令

打开终端,进入SolutionDir目录,分别构建Debug和Release版本:

构建Debug版本

# 创建并进入Debug构建目录
mkdir -p Builds/Debug && cd Builds/Debug
# 生成构建文件,指定Debug模式
cmake ../../ProjectName -DCMAKE_BUILD_TYPE=Debug
# 执行构建(Windows用msbuild,Linux/macOS用make或ninja)
make

构建Release版本

# 返回SolutionDir,创建并进入Release构建目录
cd ../.. && mkdir -p Builds/Release && cd Builds/Release
# 生成构建文件,指定Release模式
cmake ../../ProjectName -DCMAKE_BUILD_TYPE=Release
# 执行构建
make

4. 最终目录结构验证

构建完成后,你的目录会自动生成所需子目录,完全匹配需求:

SolutionDir:
┝ Builds/
| ┝ Inter/
| | ┝ Debug/
| | | ┕ lib.o
| | ┕ Release/
| |   ┕ lib.o
| ┝ Debug/
| | ┕ ProjectName/
| |   ┕ ProjectName.exe
| ┕ Release/
|   ┕ ProjectName/
|     ┕ ProjectName.exe
┕ ProjectName/
  ┕ Source/
    | lib.h
    ┕ lib.c

关键说明

  • 缓存文件(如CMakeCache.txt、CMakeFiles目录)会分别存放在Builds/Debug和Builds/Release中,完全与源码隔离。
  • 如果需要支持更多构建配置(如RelWithDebInfo),只需在foreach循环中添加对应配置即可。
  • Windows平台下使用MSBuild构建时,同样遵循此目录结构,无需额外调整。

内容的提问来源于stack exchange,提问作者OwenTheProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 10:42:21