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

CMake技术问题:如何在project2中引入上级src目录作为包含目录?

解决test.cpp编译时无法引入src目录的问题

看起来你遇到的核心问题是路径计算错误,加上没有正确告诉CMake头文件的搜索路径。先理清楚你的目录层级:

myproject/
├─ lib/
├─ src/
└─ project2/
   ├─ CMakeLists.txt
   └─ test.cpp

当你在project2目录下的CMakeLists.txt中,CMAKE_CURRENT_SOURCE_DIR(当前CMakeLists所在目录)就是myproject/project2,要访问上级目录的src,只需要向上走一级再进入src,也就是${CMAKE_CURRENT_SOURCE_DIR}/../src,而你之前写的../../会走到myproject的上级目录,这显然找不到你要的src文件夹。

下面给你两种可行的解决方案:

方案1:修正CMakeLists.txt(推荐)

你不需要手动拼接-I参数,CMake有专门的指令来管理头文件路径。替换你现有的CMakeLists.txt内容为:

cmake_minimum_required(VERSION 3.10)
project(TestExecutable)

# 先定义可执行目标
add_executable(test_runner test.cpp)

# 为目标添加私有头文件搜索路径(PRIVATE表示仅当前目标使用)
target_include_directories(test_runner PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src)

如果习惯用全局的头文件路径,也可以用include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src),但更推荐target_include_directories,它是目标级别的管理,更清晰。

方案2:直接用g++编译(跳过CMake)

如果你只是想快速单独编译test.cpp,不需要通过CMake的话,直接在project2目录下运行以下命令:

g++ test.cpp -o test -I../src

这里的-I../src就是告诉编译器去上级目录的src文件夹找头文件。

为什么你之前的方法无效?

你用set(MORE_INCLUDE_DIR "-I${CMAKE_SOURCE_DIR}../../")只是定义了一个变量,但CMake不会自动把这个变量应用到编译命令中,除非你手动把它传递给add_compile_options或者目标的编译选项,但这种方式不如官方提供的头文件管理指令规范,而且路径本身也写错了。

内容的提问来源于stack exchange,提问作者N.hwang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:37:55