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)
参考链接:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!