CMakeLists.txt常用语法
aux_source_directory(dir variable)
- 收集指定dir文件中所有源文件的名称,并将这些名称存储在提供的
中 1
2
3
4
5
6
7
8
9
10
11
12
13
14aux_source_directory(source var)
message("var: ${var}") # var: source/add.cpp;source/multipy.cpp;source/subtraction.cpp
# 注意:下面的var会包含source和samples的文件,而不仅仅是只有samples中的
aux_source_directory(samples var)
message("var: ${var}") # var: source/add.cpp;source/multipy.cpp;source/subtraction.cpp;samples/sample_add.cpp;samples/sample_multipy.cpp;samples/sample_subtraction.cpp
# 注意:虽然include目录中不存在源文件,但是var的值并不为空,它保留了之前已存在的结果
aux_source_directory(include var)
message("var: ${var}") # var: source/add.cpp;source/multipy.cpp;source/subtraction.cpp;samples/sample_add.cpp;samples/sample_multipy.cpp;samples/sample_subtraction.cpp
unset(var)
aux_source_directory(samples var)
message("var: ${var}") # var: samples/sample_add.cpp;samples/sample_multipy.cpp;samples/sample_subtraction.cpp
set(SRC_LIST xxx.c)
- 将后面的.c文件存储到SRC_LIST中
1
2
3
4
5
6
7
8
9SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
# 方式1: 各个源文件之间使用空格间隔
set(SRC_LIST add.c div.c main.c mult.c sub.c)
# 方式2: 各个源文件之间使用;间隔
set(SRC_LIST add.c;div.c;main.c;mult.c;sub.c)
add_executable(app ${SRC_LIST})
include_directories(./dir0 ./dir1)
- 他的作用是 自动去dir目录下寻找头文件
1
include_directories(./xxx0 ./xxx1)
设置输出路径
- 设置可执行文件的输出目录
1
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)
在Win + VS环境下,会自动在你所设置的目录后面扩展一层
目录,所以最终生成的Debug版本程序会在 ${PROJECT_SOURCE_DIR}/../bin/Debug 目录下,Release版本程序会在 ${PROJECT_SOURCE_DIR}/../bin/Release 目录下 在Linux + GCC环境下,无论是Debug还是Release,生成的可执行程序会直接放在你所设置的目录下,不会有差异
- 设置库文件的输出目录
1
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib)
在Win + VS环境下,会自动在你所设置的目录后面扩展一层
目录,所以最终生成的Debug版本库会在 ${PROJECT_SOURCE_DIR}/../lib/Debug 目录下,Release版本库会在 ${PROJECT_SOURCE_DIR}/../lib/Release 目录下 在Linux + GCC环境下,无论是Debug还是Release,生成的库文件会直接放在你所设置的目录下,不会有差异.
- 设置Debug版本和Release版本可执行文件的输出目录
1
2set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/../bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../bin)设置上面的属性,在任何环境下生成的可执行文件都将直接放在你所设置的目录.
- 设置Debug版本和Release版本库文件的输出目录
1
2set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/../lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../lib)设置上面的属性,在任何环境下生成的可执行文件都将直接放在你所设置的目录.
- 设置了Debug版本和Release版本下库文件的后缀名
1
2set(CMAKE_DEBUG_POSTFIX "_d")
set(CMAKE_RELEASE_POSTFIX "_r")
- 设置Debug版本和Release版本下可执行文件的后缀名.
1
2set_target_properties(${TARGET_NAME} PROPERTIES DEBUG_POSTFIX "_d")
set_target_properties(${TARGET_NAME} PROPERTIES RELEASE_POSTFIX "_r")
add_library()和add_executable()
add_executable 用于创建一个可执行文件。当你希望编译一些源文件以生成一个可以直接运行的应用程序时,你会使用这个命令。
1
add_executable(myapp app.cpp)
a可执行文件的输出依赖于操作系统,例如在 Unix 上通常是 .out 文件,而在 Windows 上则是 .exe 文件。
add_library 是 CMake 构建系统中用于创建项目内库的核心命令。这个命令允许你指定库的源文件并定义其类型。该
1
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] [source1] [source2] [...])
两者的主要区别在于最终产物的用途:add_executable 生成的可执行文件直接运行,而 add_library 生成的库则被其他目标所链接。此外,可执行文件和库在构建过程中的处理方式可能会有所不同,因为它们可能会被不同的项目或最终用户以不同的方式使用。
当你想要生成dll时,需要在使用SHARED参数
1
add_library(<name> SHARED [EXCLUDE_FROM_ALL] [source1] [source2] [...])