cmake中target_link_options和target_link_libraries的区别
时间: 2023-09-28 21:07:51 浏览: 418
`target_link_libraries` 用于将一个或多个库链接到目标中,同时可以指定库的路径和链接方式等参数。例如:
```
target_link_libraries(myapp PRIVATE foo bar)
```
其中,`myapp` 是一个目标,`foo` 和 `bar` 是要链接的库。
`target_link_options` 用于向链接器传递额外的链接选项,比如 `-L`,`-l`,`-Wl`,`-Xlinker` 等。例如:
```
target_link_options(myapp PRIVATE -Wl,-rpath,/path/to/lib)
```
其中,`myapp` 是一个目标,`-Wl,-rpath,/path/to/lib` 是要传递给链接器的选项。
因此,`target_link_libraries` 用于链接库,而 `target_link_options` 用于传递链接选项。
相关问题
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)
```
cmake target_link_options
`target_link_options` 是 CMake 3.13 引入的一个命令,用于向链接器传递额外的选项。它可用于添加链接选项,如 `-L`、`-l`、`-Wl,-rpath` 等,以及链接库时所需的其他选项。
命令语法如下:
```
target_link_options(target
PRIVATE|PUBLIC|INTERFACE <lang1>:<opt1> <lang2>:<opt2> ...
)
```
其中,`target` 表示目标名称,`PRIVATE`、`PUBLIC` 和 `INTERFACE` 分别表示目标属性的作用范围, `<lang>:<opt>` 表示传递给链接器的选项,其中 `<lang>` 表示编程语言,`<opt>` 表示选项。
例如,以下示例将 `myexe` 目标的链接选项设置为 `-L/usr/local/lib -lmylib`:
```
add_executable(myexe main.cpp)
target_link_options(myexe PRIVATE "-L/usr/local/lib" "-lmylib")
```
此外,还可以使用 `target_link_libraries` 命令将库链接到目标,并使用 `target_link_options` 命令传递链接选项:
```
add_executable(myexe main.cpp)
target_link_libraries(myexe PRIVATE mylib)
target_link_options(myexe PRIVATE "-L/usr/local/lib" "-Wl,-rpath=/usr/local/lib")
```
这将链接 `myexe` 目标和 `mylib` 库,并向链接器传递 `-L/usr/local/lib` 和 `-Wl,-rpath=/usr/local/lib` 选项。
阅读全文