【CMake】常用语句汇总

1.Cmake基础语法

1)基础路径

CMAKE_CURRENT_SOURCE_DIR:这是当前处理的CMakeLists.txt所在的目录;
CMAKE_BINARY_DIR:二进制目标文件目录,即生成exe的目录;
CMAKE_INSTALL_LIBDIR:安装路径;
get_filename_component(DIR_ONE_ABOVE ../ ABSOLUTE):获取CMAKE_CURRENT_SOURCE_DIR上方的目录

2)QMake转换为CMake编译

Qt之QMake编译转换为CMake编译

2.Cmake其他语法

1)文件拷贝

a.add_custom_command

##使用时注意拷贝路径,拷贝路径不存在时会没有任何操作。
## 拷贝单个动态库文件
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
   COMMAND ${CMAKE_COMMAND} -E copy_if_different
       "${CMAKE_CURRENT_SOURCE_DIR}/third_party/mydll.dll"  #需要拷贝的文件
       "${CMAKE_BINARY_DIR}") #拷贝目标目录
## 拷贝文件夹
add_custom_command( TARGET ${PROJECT_NAME} POST_BUILD 
	COMMAND ${CMAKE_COMMAND} -E copy_directory 
		"${CMAKE_CURRENT_SOURCE_DIR}/../ThirdParty/OpenCV/bin/win64"  #需要拷贝的文件夹
		"${CMAKE_BINARY_DIR}/Debug" )#拷贝目标目录

b.FILE-COPY

file(COPY  ${CMAKE_CURRENT_SOURCE_DIR}/enum_desc.json DESTINATION ${CMAKE_BINARY_DIR}/install/bin/data FOLLOW_SYMLINK_CHAIN)

c.add_custom_target

add_custom_target(CopyRuntimeFiles ALL  
  VERBATIM  
  COMMAND_EXPAND_LISTS  
  COMMAND ${CMAKE_COMMAND} -E  
          make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"  
COMMAND ${CMAKE_COMMAND} -E  
         copy_if_different   
                "$<$<CONFIG:Release>:${Plugin_Runtime_Release_DLL_FILES}>"   
                 "$<$<CONFIG:Debug>:${Plugin_Runtime_Debug_DLL_FILES}>"  
                "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/"    
COMMAND ${CMAKE_COMMAND} -E  
        make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/Resources/icos/"  
COMMAND ${CMAKE_COMMAND} -E  
        copy_if_different   
               "$<$<CONFIG:Release>:${Plugin_Runtime_Release_Resources_FILES}>"   
               "$<$<CONFIG:Debug>:${Plugin_Runtime_Debug_Resources_FILES}>"  
               "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/Resources/icos/"  
COMMAND ${CMAKE_COMMAND} -E  
        make_directory "${PROJECT_BINARY_DIR}/$<$<CONFIG:Release>:Release>$<$<CONFIG:Debug>:Debug>/Plugins/org_test_plugins/"  
)  

2)生成动态库、静态库

关键语法: add_library
创建动态库:add_library(项目名称 SHARED 代码文件)
创建静态库:add_library(项目名称 STATIC 代码文件)

# 生成动态库
add_library(${PROJECT_NAME} SHARED ${SRC_LIST})

3)构建子项目

橘崽崽啊 CMake基础 第13节 构建子项目

最顶级项目CMakeLists.txt构建如下,其他子项目按照正常编写。

# 顶级CMakeLists.txt
cmake_minimum_required (VERSION 3.5)

project(subprojects)

# Add sub directories
add_subdirectory(sublibrary1)
add_subdirectory(sublibrary2)
add_subdirectory(subbinary)

4)子项目依赖管理

libnode依赖core_cmake,在libnode的CMakeLists.txt中:
add_dependencies(libnode core_cmake):注意必须放在add_executable( IMPORTED)之后才起作用

#发现使用这个才有效
target_link_libraries(gui_debugger PRIVATE Qt${QT_VERSION_MAJOR}::Widgets libnode)

5)指定安装位置

a.设置路径,在project(XX)之后:

`SET(CMAKE_INSTALL_PREFIX <install path> CACHE PATH "Install path prefix" FORCE)`

b.设置RUNTIME_OUTPUT_DIRECTORY属性控制输出路径,在add_library/add_executable之后:

set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "abc/")

3.Cmake常见问题

1)乱码问题

解决方法:强制使用utf-8编码模式

if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
    # Force MSVC to use UTF-8 because that's what we use. Otherwise it uses
    # the default of whatever Windows sets and causes encoding issues.
    message(STATUS "You are using MSVC. Forceing to use UTF-8")
    add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
    add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
endif ()

2)配置CMake编译

CMakeTool:点击管理,选择cmake.exe,应用即可。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值