请详细说明cmake中的target_include_directories()原型,参数含义,作用以及如何使用
时间: 2024-03-16 12:48:00 浏览: 60
target_include_directories()是一个CMake函数,用于向目标添加包含目录。它的原型如下:
```
target_include_directories(target
[SYSTEM | BEFORE]
[INTERFACE | PUBLIC | PRIVATE]
[items1...] [items2...] ...
)
```
其中,`target`是目标名称,`items`可以是一个目录或一个包含目录的组合。
`SYSTEM`选项告诉编译器,这些目录是系统级别的,不应该产生警告。`BEFORE`选项告诉编译器,在其他目录之前搜索这些目录。`INTERFACE`选项指示目录仅在接口上使用,`PUBLIC`选项表示目录在接口和目标上使用,`PRIVATE`选项表示目录仅在目标上使用。
该函数的作用是将指定的目录添加到目标的包含路径中,以便在编译时可以找到相关的头文件。这个函数通常在add_executable或add_library之后使用。
以下是一个使用target_include_directories()函数的示例:
```
add_executable(myapp main.c)
target_include_directories(myapp PRIVATE include)
```
这个示例将目录“include”添加到“myapp”可执行文件的包含路径中,以便编译器可以找到相关的头文件。
相关问题
请详细说明cmake中的target_include_directories()函数原型,各个参数含义,作用以及如何使用请举例说明
好的,target_include_directories()函数是用于向一个或多个CMake目标添加include路径的函数,其原型如下:
```cmake
target_include_directories(target
[SYSTEM] [BEFORE]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
```
各参数含义如下:
- `target`:要添加路径的目标名称。
- `SYSTEM`:指定添加的路径为系统路径。
- `BEFORE`:指定添加的路径插入到已有路径的前面。
- `<INTERFACE|PUBLIC|PRIVATE>`:指定添加的路径对目标的哪一部分生效,具体解释如下:
- `INTERFACE`:只对目标的接口即头文件有影响,不会对目标本身的编译和链接产生影响。
- `PUBLIC`:对目标本身及其使用者都有影响,会编译和链接路径中包含的头文件。
- `PRIVATE`:只对目标本身有影响,不对使用者产生影响。
- `items`:要添加的路径。
其作用是向一个目标添加include路径,可以同时添加多个路径,也可以分别指定路径的类型。使用示例如下:
```cmake
add_executable(my_target main.cpp)
target_include_directories(my_target
PRIVATE src/ # 只对my_target有影响
PUBLIC include/ # 对my_target及使用者都有影响
)
```
上述示例中,我们定义了一个名为`my_target`的可执行文件,并通过`target_include_directories()`函数向其添加了两个路径,其中`src/`路径只对`my_target`本身有影响,`include/`路径则对`my_target`及其使用者都有影响。
vscode cmake 多文件
### 使用 VSCode 和 CMake 构建多文件 C++ 工程
#### 创建工程文件夹结构
为了有效地管理多个源文件和头文件,建议按照以下方式组织项目文件夹:
- `include` 文件夹用于存放所有的 `.h` 或 `.hpp` 头文件。
- `src` 文件夹用于存放所有的 `.cpp` 源代码文件。
例如:
```
my_project/
├── include/
│ └── my_header.h
└── src/
├── main.cpp
└── another_file.cpp
```
#### 编写 CMakeLists.txt 文件
CMakeLists.txt 是 CMake 的核心配置文件,定义了如何构建整个项目。以下是创建该文件的一种常见做法:
1. **手动创建**:可以直接在项目的根目录下新建一个名为 `CMakeLists.txt` 的文本文件,并编辑其内容来描述项目的依赖关系和其他设置[^2]。
```cmake
cmake_minimum_required(VERSION 3.10)
project(MyProject)
set(CMAKE_CXX_STANDARD 14)
add_subdirectory(src)
```
2. **通过命令生成**:也可以借助 VSCode 中的 CMake 扩展提供的快捷指令(如 `CMake: Quick Start`),这将会帮助快速搭建起基本框架并自动生成必要的文件夹结构[^1]。
对于 `src/CMakeLists.txt` 可能看起来像这样:
```cmake
file(GLOB SOURCES "*.cpp")
add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME}
PUBLIC
${CMAKE_SOURCE_DIR}/include
)
```
这段脚本告诉 CMake 将所有位于当前路径下的 .cpp 文件打包成一个可执行程序,并指定包含路径以便找到外部声明的函数原型或类定义。
#### 配置任务与启动套件 (Kit)
确保安装了一个合适的编译器作为 Kit 并进行了正确关联。如果状态栏未显示出可用的 Kits,则可以通过调用命令面板 (`Ctrl+Shift+P`) 来选择适当的操作完成初始化过程。
#### 进行编译操作
一旦完成了上述准备工作,就可以利用内置的任务系统来进行实际的编译工作。通常情况下只需要点击菜单中的 “终端 -> 运行构建任务...”,接着选取之前定义好的 make 命令即可触发完整的编译流程[^3]。
```json
{
"version": "2.0.0",
"tasks": [
{
"label": "build project",
"type": "shell",
"command": "${workspaceFolder}/build/mingw32-make.exe"
}
]
}
```
以上就是关于在 Visual Studio Code 上使用 CMake 管理复杂工程项目的大致介绍;当然还有许多高级特性等待探索!
阅读全文