CMakeLists常用命令

一、project(project_name)

指定当前项目名称

二、add_subdirectory(project_name)

添加子目录

三、add_executable(name cpp_name)

将cpp_name的cpp文件生成名为name的可执行文件

四、add_library(mylib STATIC ${SOURCES}) # 生成静态库 libmylib.a

指定要生成的静态库(STATIC)或动态库(SHARED),如果不指定,则根据BUILD_SHARED_LIBS选项是否打开来生成默认的版本,ON 生成动态库,OFF 生成静态库

    set(BUILD_SHARED_LIBS ON)
    #XX_PROJECT_LIBRARY_SRCS是一个数组,记录了所有impl下cpp文件的名字
    file(GLOB XX_PROJECT_LIBRARY_SRCS impl/*.cpp) 
    add_library(${PROJECT_NAME} ${XX_PROJECT_LIBRARY_SRCS})

五、target_include_directories

指定编译 target 所需要的头文件。PUBLIC 和 INTERFACE 具有依赖传递性,而 PRIVATE 没有。

    target_include_directories(${PROJECT_NAME} PUBLIC
        ${PROJECT_SOURCE_DIR}/include)
    target_include_directories(${PROJECT_NAME} PRIVATE
        ${PROJECT_SOURCE_DIR}/impl)

六、target_link_libraries

如果 target 是一个 library,该命令可以用来指定依赖本仓库的 target 还需要链接另外的仓库,用于解决循环依赖。

如果 target 是可执行文件,则该命令用于指定其需要链接的库。

如果link的target已经include过XXX了,就不用再target_include_directories了

常用格式:
   target_link_libraries(${PROJECT_NAME} PUBLIC
        planning
        )
   或
   target_link_libraries(test ${PROJECT_NAME}
        planning
        # dependence for itself only
        )

七、option

可供用户选择的选项,默认为OFF,可以通过使用cmake -D参数设定

option(WITH_PLANNING "sweep with block" OFF)
if (WITH_COVERAGE_PLANNING)
  add_definitions(-DCOVERAGE_PLANNING)
else ()
  remove_definitions(-DCOVERAGE_PLANNING)
endif ()

八、设置库存储路径

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/components)

参考链接:

CMake 基本用法介绍

posted @ 2022-04-06 14:14  小丑_jk  阅读(555)  评论(0编辑  收藏  举报