target_sources()的用法
时间: 2024-02-18 19:59:58 浏览: 19
`target_sources()`是CMake中用于向目标添加源文件的函数,其使用方法如下:
```cmake
target_sources(target
PRIVATE
source1
source2
PUBLIC
source3
source4
INTERFACE
source5
source6
)
```
其中,`target`是目标对象的名称,可以是`add_executable()`或`add_library()`创建的对象。
`PRIVATE`表示这些源文件仅在当前目标中使用,不会传递给依赖项。`PUBLIC`表示这些源文件不仅在当前目标中使用,也会在其依赖项中传递。`INTERFACE`表示这些源文件仅在依赖项中使用,不会在当前目标中使用。
例如,下面的代码将`mylib`目标添加了两个源文件`src1.cpp`和`src2.cpp`:
```cmake
add_library(mylib STATIC)
target_sources(mylib
PRIVATE
src1.cpp
src2.cpp
)
```
使用`target_sources()`可以方便地将源文件添加到目标中,避免了多次调用`add_library()`或`add_executable()`的麻烦。
相关问题
cmake中target_sources用法target_link_libraries\target_include_directories\target_compile_options
在CMake中,target_sources命令用于向target添加源文件,其格式如下:
```cmake
target_sources(<target> [PRIVATE|PUBLIC|INTERFACE] [items1...]
[<PRIVATE|PUBLIC|INTERFACE> [items2...] ...])
```
这个命令可以将源文件直接添加到指定的target中。源文件可以是C、C++、Objective-C、Objective-C++等类型的文件。
例如,假设我们有一个名为myapp的目标,并且我们想将两个源文件main.cpp和helper.cpp添加到该目标中,可以使用以下代码:
```cmake
add_executable(myapp)
target_sources(myapp PRIVATE main.cpp helper.cpp)
```
target_link_libraries命令用于将目标与库文件进行链接,其格式如下:
```cmake
target_link_libraries(<target> [item1] [item2] [...])
```
这个命令可以将库文件链接到指定的target中,以便在编译和链接过程中使用这些库。
例如,假设我们有一个名为myapp的目标,并且我们想将名为mylib的库文件链接到该目标中,可以使用以下代码:
```cmake
add_executable(myapp)
target_link_libraries(myapp mylib)
```
target_include_directories命令用于向target添加包含目录,其格式如下:
```cmake
target_include_directories(<target> [SYSTEM] [BEFORE|AFTER]
<INTERFACE|PUBLIC|PRIVATE> [items1...]
[<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])
```
这个命令可以将包含目录添加到指定的target中,以便在编译过程中可以找到所需的头文件。
例如,假设我们有一个名为myapp的目标,并且我们想将名为include的目录添加到该目标的包含目录中,可以使用以下代码:
```cmake
add_executable(myapp)
target_include_directories(myapp PRIVATE include)
```
execute_process(COMMAND javac ${JAVA_SOURCES}) add_custom_command(TARGET test_demo POST_BUILD COMMAND jar cvf JavaJni.jar GLJNILib.class )
这段 CMakeLists.txt 的代码看起来像是用于在编译 C++ 代码时调用 Java 编译器生成 JNI 接口的,然后将 JNI 接口打包成 jar 文件。其中 `execute_process` 语句用于执行外部命令,这里是调用 javac 编译 Java 源文件;`add_custom_command` 语句用于在 C++ 代码编译完成后执行一些自定义命令,这里是执行 jar 命令打包 JNI 接口。
具体来说,这段代码的作用如下:
1. 编译 Java 源文件:`${JAVA_SOURCES}` 是一个变量,表示 Java 源文件的文件名列表。`execute_process` 语句会执行 `javac` 命令编译这些源文件,生成相应的类文件。
2. 打包 JNI 接口:`add_custom_command` 语句中的 `TARGET test_demo POST_BUILD` 表示在 `test_demo` 目标编译完成后执行。`COMMAND jar cvf JavaJni.jar GLJNILib.class` 命令会将 `GLJNILib.class` 文件打包成 `JavaJni.jar` 文件,用于在 C++ 代码中调用 Java 接口。
需要注意的是,这段代码中的路径和文件名都是示例,具体的路径和文件名需要根据实际情况进行修改。另外,使用 JNI 接口需要在 C++ 代码中使用 `JNIEnv` 和 `jobject` 等 Java 虚拟机相关的数据类型,需要了解这些数据类型的使用方法。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)