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)
参考链接: