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

自定义src/include目录构建CMake项目时出现错误

CMake构建错误解决:子目录源文件路径问题

问题根源

  1. 重复添加源文件:根目录CMakeLists中已指定src/main.cpp,子目录CMakeLists又添加main.cpp,造成重复处理。
  2. 相对路径解析错误:未启用CMP0076策略时,target_sources的相对路径默认**基于目标创建的目录(根目录)**解析,而非当前子目录,导致CMake在根目录查找main.cpp,最终找不到文件。

修复方案

方案一:启用CMP0076策略规范路径解析

  1. 修改根目录CMakeLists.txt:先创建空可执行目标,由子目录负责添加所有源文件:
cmake_minimum_required(VERSION 3.7)
project(Quick3D VERSION 0.1 LANGUAGES CXX)

# 创建空目标,后续由子目录补充源文件
add_executable(${PROJECT_NAME})
add_subdirectory(src)

target_include_directories(${PROJECT_NAME}
    PRIVATE
    ${PROJECT_SOURCE_DIR}/include
)
  1. 修改src目录CMakeLists.txt:设置CMP0076策略,让相对路径基于当前子目录解析:
# 启用CMP0076,使target_sources的相对路径指向当前CMakeLists所在目录
cmake_policy(SET CMP0076 NEW)

target_sources(
    ${PROJECT_NAME}
    PRIVATE
    main.cpp
    mainwindow.cpp
)

方案二:直接使用绝对路径指定源文件

若不想修改CMake策略,可通过CMAKE_CURRENT_SOURCE_DIR直接指定源文件的绝对路径:

修改src目录CMakeLists.txt:

target_sources(
    ${PROJECT_NAME}
    PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/mainwindow.cpp
)

同时根目录CMakeLists.txt需移除src/main.cpp,避免重复添加:

cmake_minimum_required(VERSION 3.7)
project(Quick3D VERSION 0.1 LANGUAGES CXX)

add_executable(${PROJECT_NAME})
add_subdirectory(src)

target_include_directories(${PROJECT_NAME}
    PRIVATE
    ${PROJECT_SOURCE_DIR}/include
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:02:22