loading...
CMakeList的常用语法
发表于:2024-07-31 |
字数统计: 991 | 阅读时长: 4分钟 | 阅读量:

CMakeLists.txt常用语法

aux_source_directory(dir variable)

  • 收集指定dir文件中所有源文件的名称,并将这些名称存储在提供的
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    aux_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
    9
    SET(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
    2
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG   ${PROJECT_SOURCE_DIR}/../bin)    
    set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../bin)

    设置上面的属性,在任何环境下生成的可执行文件都将直接放在你所设置的目录.

  • 设置Debug版本和Release版本库文件的输出目录
    1
    2
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/../lib)    
    set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../lib)

    设置上面的属性,在任何环境下生成的可执行文件都将直接放在你所设置的目录.

  • 设置了Debug版本和Release版本下库文件的后缀名
    1
    2
    set(CMAKE_DEBUG_POSTFIX "_d")    
    set(CMAKE_RELEASE_POSTFIX "_r")
  • 设置Debug版本和Release版本下可执行文件的后缀名.
    1
    2
    set_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] [...])
上一篇:
多目录下CMakeLists写法
下一篇:
vscode配置c文件的运行2_CMake