请详细说明cmake中的target_sources()原型,参数含义,作用以及如何使用
时间: 2024-03-17 09:41:05 浏览: 28
好的,下面是 `target_sources()` 的详细说明:
### 函数原型
```cmake
target_sources(<target> [PRIVATE|PUBLIC|INTERFACE] [items1...] [PRIVATE|PUBLIC|INTERFACE] [items2...] ...)
```
其中,`<target>` 表示目标库或可执行文件的名称,`[items1...]` 和 `[items2...]` 是源文件列表。
### 参数含义
- `<target>`:目标库或可执行文件的名称。
- `[PRIVATE|PUBLIC|INTERFACE]`:可选项,表示后面的源文件列表的属性。这里的属性有三种:
- `PRIVATE`:仅对当前目标生效。
- `PUBLIC`:当前目标和依赖当前目标的目标都会生效。
- `INTERFACE`:仅对依赖当前目标的目标生效。
- `[items1...]` 和 `[items2...]`:源文件列表,可以包含多个源文件。
### 作用
`target_sources()` 函数的作用是将源文件列表添加到目标库或可执行文件中。这些源文件可以是 `.cpp`、`.c`、`.cxx`、`.cc` 等格式的文件。
在 `target_sources()` 函数中,可以使用 `PRIVATE`、`PUBLIC`、`INTERFACE` 等属性设置哪些目标可以访问这些源文件。这些属性可以控制源文件的可见性、编译选项、链接选项等。
### 如何使用
下面是一个简单的使用示例,将 `src1.cpp` 和 `src2.cpp` 两个源文件添加到目标库 `mylib` 中:
```cmake
add_library(mylib STATIC)
target_sources(mylib
PRIVATE
src1.cpp
src2.cpp
)
```
上面的示例中,`PRIVATE` 表示这两个源文件仅对当前目标库生效,其他依赖该目标库的目标无法访问这两个源文件。
除了使用 `PRIVATE` 属性,还可以使用 `PUBLIC` 和 `INTERFACE` 属性。例如,将 `src3.cpp` 和 `src4.cpp` 两个源文件同时暴露给当前目标库和依赖当前目标库的目标:
```cmake
add_library(mylib STATIC)
target_sources(mylib
PUBLIC
src3.cpp
src4.cpp
)
```
使用 `INTERFACE` 属性可以将源文件暴露给依赖当前目标库的目标,但是不会对当前目标库本身产生影响:
```cmake
add_library(mylib STATIC)
target_sources(mylib
INTERFACE
src5.cpp
src6.cpp
)
```
以上就是 `target_sources()` 的详细说明,希望能对您有所帮助。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)