CMake中add_executable 和 add_library区别
时间: 2024-04-07 20:31:00 浏览: 162
在 CMake 中,`add_executable` 和 `add_library` 都是用来定义一个目标文件的方法,但它们的作用不同:
- `add_executable` 用于创建一个可执行文件,即生成一个 .out 文件,这个文件可以直接运行。
- `add_library` 用于创建一个库文件,即生成一个 .a 或 .so 文件,这个文件可以被其他程序链接使用。
另外,`add_library` 还可以定义 STATIC 和 SHARED 两种类型的库文件。STATIC 类型的库文件是静态链接库,链接时将库文件的代码完全复制一份到可执行文件中;SHARED 类型的库文件是动态链接库,链接时只将一个指向库文件的指针放入可执行文件中,运行时需要加载动态链接库并将其代码复制到内存中。
需要注意的是,在使用 `add_library` 定义一个库文件时,还需要通过 `target_link_libraries` 命令将该库文件连接到其他可执行文件或库文件中。
相关问题
cmake add_executable add_library
CMake 是一个跨平台的自动化构建系统,它使用 CMakeLists.txt 文件来控制软件的编译过程。CMake 提供了一系列命令来添加可执行文件和库文件到构建过程中。
`add_executable` 命令用于从指定的源文件列表创建一个可执行文件。基本语法如下:
```cmake
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
```
其中 `<name>` 是目标可执行文件的名称,后面的参数是可选的,`WIN32` 指定生成的可执行文件适用于 Windows 系统,`MACOSX_BUNDLE` 用于生成 MacOS 系统下的应用程序包,`EXCLUDE_FROM_ALL` 表示该目标不会从 CMakeLists.txt 的顶级级别自动构建。源文件列表列出了创建该可执行文件所需的所有源代码文件。
`add_library` 命令用于创建一个库文件。基本语法如下:
```cmake
add_library(<name> [STATIC | SHARED | MODULE | OBJECT | INTERFACE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
```
其中 `<name>` 是目标库文件的名称,`STATIC`、`SHARED`、`MODULE`、`OBJECT`、`INTERFACE` 指定了库文件的类型。`STATIC` 表示生成静态库,`SHARED` 表示生成动态链接库,`MODULE` 用于插件等模块化的动态库,`OBJECT` 用于创建对象文件集合,`INTERFACE` 用于定义接口目标,这些接口目标可以被其他目标使用。与 `add_executable` 类似,`EXCLUDE_FROM_ALL` 用于表示该目标不应从顶级构建。
使用 `add_executable` 和 `add_library` 可以在 CMake 中定义项目结构,它们是项目构建过程中的基础组件。
ubuntu16.04运行时报错CMake Error at bobac2_description/CMakeLists.txt:147 (add_dependencies): Cannot add target-level dependencies to non-existent target "bobac2_description_node". The add_dependencies works for top-level logical targets created by the add_executable, add_library, or add_custom_target commands. If you want to add file-level dependencies see the DEPENDS option of the add_custom_target and add_custom_command commands. CMake Error at bobac2_description/CMakeLists.txt:150 (target_link_libraries): Cannot specify link libraries for target "bobac2_description_node" which is not built by this project. -- Configuring incomplete, errors occurred! See also "/home/bobac3/ros_workspace/build/CMakeFiles/CMakeOutput.log". See also "/home/bobac3/ros_workspace/build/CMakeFiles/CMakeError.log". Makefile:2796: recipe for target 'cmake_check_build_system' failed make: *** [cmake_check_build_system] Error 1 CMake Error at bobac2_description/CMakeLists.txt:147 (add_dependencies): Cannot add target-level dependencies to non-existent target "bobac2_description_node". The add_dependencies works for top-level logical targets created by the add_executable, add_library, or add_custom_target commands. If you want to add file-level dependencies see the DEPENDS option of the add_custom_target and add_custom_command commands. CMake Error at bobac2_description/CMakeLists.txt:150 (target_link_libraries): Cannot specify link libraries for target "bobac2_description_node" which is not built by this project. -- Configuring incomplete, errors occurred! See also "/home/bobac3/ros_workspace/build/CMakeFiles/CMakeOutput.log". See also "/home/bobac3/ros_workspace/build/CMakeFiles/CMakeError.log". Makefile:2796: recipe for target 'cmake_check_build_system' failed make: *** [cmake_check_build_system] Error 1
这个错误可能是因为在运行CMake时,找不到名为"bobac2_description_node"的目标。这可能是因为在CMakeLists.txt文件中没有正确地定义目标或源文件。您可以检查一下CMakeLists.txt文件中的目标和源文件是否正确定义。另外,您可以尝试清理并重新构建项目,以确保没有编译错误。您也可以查看CMakeError.log和CMakeOutput.log文件,以获取更多关于错误的详细信息。
阅读全文