使用VS2022创建一个CMake工程后,生成的默认配置文件CMakeLists.txt如下:
- # CMakeList.txt: CMakeTest 的 CMake 项目,在此处包括源代码并定义
- # 项目特定的逻辑。
- #
- cmake_minimum_required (VERSION 3.8)
-
- # 如果支持,请为 MSVC 编译器启用热重载。
- if (POLICY CMP0141)
- cmake_policy(SET CMP0141 NEW)
- set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "$
,$>,$<$:EditAndContinue>,$<$:ProgramDatabase>>" ) - endif()
-
- project ("CMakeTest")
-
- # 将源代码添加到此项目的可执行文件。
- add_executable (CMakeTest "CMakeTest.cpp" "CMakeTest.h")
-
- if (CMAKE_VERSION VERSION_GREATER 3.12)
- set_property(TARGET CMakeTest PROPERTY CXX_STANDARD 20)
- endif()
-
- # TODO: 如有需要,请添加测试并安装目标。
将CMakeSettings.json修改,连接到远程Linux服务器。
- {
- "configurations": [
- {
- "name": "Linux-GCC-Debug",
- "generator": "Unix Makefiles",
- "configurationType": "Debug",
- "cmakeExecutable": "cmake",
- "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
- "cmakeCommandArgs": "",
- "buildCommandArgs": "",
- "ctestCommandArgs": "",
- "inheritEnvironments": [ "linux_x64" ],
- "remoteMachineName": "${defaultRemoteMachineName}",
- "remoteCMakeListsRoot": "$HOME/${projectDirName}/src",
- "remoteBuildRoot": "$HOME/${projectDirName}/build/${name}",
- "remoteInstallRoot": "$HOME/${projectDirName}/install/${name}",
- "remoteCopySources": true,
- "rsyncCommandArgs": "-t --delete",
- "remoteCopyBuildOutput": false,
- "remoteCopySourcesMethod": "rsync"
- },
- {
- "name": "Linux-GCC-Release",
- "generator": "Unix Makefiles",
- "configurationType": "Release",
- "cmakeExecutable": "cmake",
- "remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
- "cmakeCommandArgs": "",
- "buildCommandArgs": "",
- "ctestCommandArgs": "",
- "inheritEnvironments": [ "linux_x64" ],
- "remoteMachineName": "${defaultRemoteMachineName}",
- "remoteCMakeListsRoot": "$HOME/${projectDirName}/src",
- "remoteBuildRoot": "$HOME/${projectDirName}/build/${name}",
- "remoteInstallRoot": "$HOME/${projectDirName}/install/${name}",
- "remoteCopySources": true,
- "rsyncCommandArgs": "-t --delete",
- "remoteCopyBuildOutput": false,
- "remoteCopySourcesMethod": "rsync"
- }
- ]
- }
对于无值宏:add_definitions(-DBOOST_ALL_DYN_LINK)
对应于C语言中的 #define BOOST_ALL_DYN_LINK
对有值宏:add_definitions(-DLIBEVENT_VERSION_NUMBER=0x02010800)
对应C语言:#define LIBEVENT_VERSION_NUMBER 0x02010800
这个指令需要高cmake版本才能支持。比如:add_compile_definitions(MG_ENABLE_OPENSSL=1)
对应于C语言中的 #define MG_ENABLE_OPENSSL 1
add_compile_definitions(BOOST_LOG_DYN_LINK)
CMakeLists.txt 文件中定义的宏在后面C/C++程序中是可以直接使用。
- add_definitions(-DBOOST_ALL_DYN_LINK)
- add_definitions(-DZLIB_VERSION 0X21)
-
- add_compile_definitions(ZLIB_VERSION=0X21)
- add_compile_definitions(BOOST_ALL_DYN_LINK)
set(CMAKE_C_COMPULER \"/usr/local/bin/gcc\")
set(CMAKE_CXX_COMPULER \"/usr/local/bin/g++\")
- # 1. 指定头文件位置
- target_include_directories(test PRIVATE "${PROJECT_SOURCE_DIR}/../loglib/include")
- # 2. 指定库文件搜索位置
- target_link_directories(test PRIVATE "${PROJECT_SOURCE_DIR}/../loglib/bin")
- # 3. 指定需要链接的库
- target_link_libraries(test -ltacopie -lcpo_redis)
-
- file(GLOB SRC_LIST ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
- # 4. 生成可执行文件
- add_executable(test ${SRC_LIST})
- # 5. 生成动态链接库
- add_library(utility utility.cpp convert.cpp)
- add_executable(test.exe main.cpp)
- # 6. 链接库
- target_link_libraries(test.exe utility)
- #add_library写明了生成一个叫做utility.a的库文件,
- #然后和main.cpp编译出来的main.o生成可执行文件
要在CMake中将配置文件复制到输出目录,两种方式
(1)configure_file(setting.xml ${CMAKE_CURRENT_BINARY_DIR}/setting.xml COPYONLY)
(2)file(COPY setting.xml DESTINATION ${CMAKE_CURRENT_BINARY_DIR})