cmake工程常用命令

本文介绍了如何在CMake项目中集成vcpkg管理第三方库,包括设置CMakeToolchain_file、判断平台和构建类型、创建文件夹和复制文件,以及在Windows和Linux平台上配置编译输出目录和引入常用库的方法。
摘要由CSDN通过智能技术生成

自用,备忘

一、集成vcpkg到cmake工程
    VS新建cmake项目后,如果想要引入用vcpkg安装好的第三方库,可以打开项目里的CMakePresets.json,找到如下代码段

"cacheVariables": {
    "CMAKE_C_COMPILER": "cl.exe",
    "CMAKE_CXX_COMPILER": "cl.exe"
},

    在里面添加上vcpkg的路径

"CMAKE_TOOLCHAIN_FILE": "D:/Vcpkg/scripts/buildsystems/vcpkg.cmake"


二、判断当前平台是windows还是linux

if (CMAKE_SYSTEM_NAME MATCHES "Windows")
    message ("Platform: Windows")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
    message ("Platform: Linux")
endif()


三、判断Debug、Release

if (CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Release"))
    message ("Build type: Release")
else()
    message ("Build type: Debug")
endif()


四、文件命令
创建文件夹

execute_process (COMMAND ${CMAKE_COMMAND} -E make_directory ${path})

拷贝文件夹

execute_process (COMMAND ${CMAKE_COMMAND} -E copy_directory ${path1} ${path2})

拷贝文件

execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${path1}/xxx.cpp ${path2})

当前CMakeLists所在文件夹目录

${CMAKE_CURRENT_SOURCE_DIR}

设置编译文件输出目录(windows)

set (publish_debug ${CMAKE_CURRENT_SOURCE_DIR}/Publish/Debug)
set (publish_release ${CMAKE_CURRENT_SOURCE_DIR}/Publish/Release)
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${publish_debug})
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${publish_release})

获取编译文件输出目录(windows)

即 ${publish_debug} 或 ${publish_release}

设置编译文件输出目录(linux)

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

获取编译文件输出目录(linux)

${EXECUTABLE_OUTPUT_PATH}


五、常用库的查找,引入(动态链接)
boost

add_compile_definitions(BOOST_ALL_NO_LIB)
add_compile_definitions(BOOST_ALL_DYN_LINK)
find_package (Boost 1.82.0 REQUIRED COMPONENTS filesystem json)
include_directories (${Boost_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE Boost::boost Boost::filesystem Boost::json)

fmt

find_package (fmt REQUIRED)
target_link_libraries (${PROJECT_NAME} PRIVATE fmt::fmt)

cgal

set (CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE ON)
find_package (CGAL REQUIRED COMPONENTS Core)
include_directories (${CGAL_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE CGAL::CGAL CGAL::CGAL_Core)

freetype

find_package (Freetype REQUIRED)
include_directories (${FREETYPE_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE ${FREETYPE_LIBRARIES})

opencv

find_package (OpenCV REQUIRED)
include_directories (${OpenCV_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE ${OpenCV_LIBRARIES})

spdlog

find_package (spdlog REQUIRED)
target_link_libraries (${PROJECT_NAME} PRIVATE spdlog::spdlog_header_only)

poco

find_package (Poco REQUIRED Net Util Foundation)
target_link_libraries (${PROJECT_NAME} PRIVATE Poco::Net Poco::Util Poco::Foundation)

jsoncpp

find_package (jsoncpp REQUIRED)
target_link_libraries (${PROJECT_NAME} PRIVATE jsoncpp_lib)


六、其他
指定cmake最小版本

cmake_minimum_required(VERSION 3.2)

设置项目名称

project(demo)

生成一个可执行文件

add_executable(${PROJECT_NAME} demo.cpp demo.h)

生成一个库

add_library(${PROJECT_NAME} SHARED demo.cpp demo.h)            可选:STATIC/SHARED/MODULE

声明本地变量

set(LIBRARY_LIST Boost::boost CGAL::CGAL)

设置属性

set_property(TARGET TargetName
    PROPERTY CXX_STANDARD 11)
set_target_properties(TargetName PROPERTIES
    CXX_STANDARD 11)

包含子目录

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

七、设置cmake项目在VS中调试时传递的参数
https://learn.microsoft.com/zh-cn/cpp/build/configure-cmake-debugging-sessions?view=msvc-170
调试->调试和启动XXX的设置
会在.vs目录下生成launch.vs.json
在原有的配置上增加args字段,如下

"configurations": [
    {
        "type": "default",
        "project": "CMakeLists.txt",
        "projectTarget": "CMakeDebugParam.exe (CMakeDebugParam\\CMakeDebugParam.exe)",
        "name": "CMakeDebugParam.exe (CMakeDebugParam\\CMakeDebugParam.exe)",
        "args": [ "Hello", "World" ]
    }
]

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值