CMake中add_executable 和 add_library区别
时间: 2024-04-07 19:31:00 浏览: 16
在 CMake 中,`add_executable` 和 `add_library` 都是用来定义一个目标文件的方法,但它们的作用不同:
- `add_executable` 用于创建一个可执行文件,即生成一个 .out 文件,这个文件可以直接运行。
- `add_library` 用于创建一个库文件,即生成一个 .a 或 .so 文件,这个文件可以被其他程序链接使用。
另外,`add_library` 还可以定义 STATIC 和 SHARED 两种类型的库文件。STATIC 类型的库文件是静态链接库,链接时将库文件的代码完全复制一份到可执行文件中;SHARED 类型的库文件是动态链接库,链接时只将一个指向库文件的指针放入可执行文件中,运行时需要加载动态链接库并将其代码复制到内存中。
需要注意的是,在使用 `add_library` 定义一个库文件时,还需要通过 `target_link_libraries` 命令将该库文件连接到其他可执行文件或库文件中。
相关问题
add_library和add_executable的区别
add_library和add_executable是CMake中用于添加库和可执行文件的两个函数。
add_library用于添加一个库文件,可以是静态库(.a文件)或者动态库(.so文件)。它的语法为:
```cmake
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
```
其中,<name>为库的名称,可以自定义,[STATIC | SHARED | MODULE]用于指定库的类型,默认为STATIC静态库。[EXCLUDE_FROM_ALL]用于将该库从构建过程中排除,不会被构建,默认为不排除。后面的[source1] [source2 ...]用于指定库的源文件。
add_executable用于添加一个可执行文件,它的语法为:
```cmake
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
[source1] [source2 ...])
```
其中,<name>为可执行文件的名称,可以自定义。[WIN32]用于指定构建Windows平台的可执行文件,[MACOSX_BUNDLE]用于指定构建macOS平台的可执行文件。后面的[source1] [source2 ...]用于指定可执行文件的源文件。
总结起来,add_library用于添加库文件,add_executable用于添加可执行文件。它们的主要区别在于生成的文件类型和使用的语法。
cmake中aux_source_directory和add_subdirectory 有什么区别
`aux_source_directory` 和 `add_subdirectory` 是 CMake 中用于添加源文件的两个命令。它们的区别在于:
1. `aux_source_directory` 命令会自动查找指定目录下的所有源文件,并将它们存储在一个变量中。这个变量可以在 `add_executable` 或 `add_library` 命令中使用,从而将这些源文件编译成一个可执行文件或库文件。而 `add_subdirectory` 命令则是将指定目录下的 CMakeLists.txt 文件作为一个子项目添加到当前项目中。
2. `aux_source_directory` 命令只能添加指定目录下的源文件,而 `add_subdirectory` 命令可以添加整个子项目,并且可以在该子项目中使用其他的 CMake 命令和变量。
因此,当你只需要添加一个目录下的源文件时,可以使用 `aux_source_directory` 命令;当你需要添加一个完整的子项目时,应该使用 `add_subdirectory` 命令。