使用visual studio创建Cmake项目后,默认的工作目录是在C盘的用户目录下。并非在项目的路径下,这对于维护和开发起来会有些许不方便。
默认的路径如下:
${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}
生成可执行路径如下:
${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}
产生CMakeSettings.json,只需要点击vs 上选择编译平台的按钮生成,点击x64-Debug或者x64-Release。
修改默认工作目录需要修改CMakeSettings.json文件
修改文件中的 ** “buildRoot” ** 可以将cmake产生的编译信息生成到修改后的路径下
修改文件中的 ** installRoot ** 可以将可执行文件生成到修改后的路径下
CmakeSetting.json 参数解释:
name:在VS上选择的平台名称
generator:Cmake生成器,用于生成不同项目,包括但不限于:"Ninja" “Unix 生成文件” “Visual Studio 16 2019” “Visual Studio 16 2019 Win64” “Visual Studio 16 2019 ARM” "Visual Studio 15 2017" "Visual Studio 15 2017 Win64" "Visual Studio 15 2017 ARM" "Visual Studio 14 2015" "Visual Studio 14 2015 Win64" "Visual Studio 14 2015 ARM"
configurationType:生成器的生成配置类型。 当前支持的值为“Debug”、“MinSizeRel”、“Release”和“RelWithDebInfo”。 它映射CMAKE_BUILD_TYPE。
buildRoot:编译信息产生的文件的生成路径。映射到 CMAKE_BINARY_DIR
installRoot:编译生成的可执行文件的生成路径
cmakeCommandArgs:参考自定义 CMake 生成设置
buildCommandArgs: 参考自定义 CMake 生成设置
ctestCommandArgs:参考自定义 CMake 生成设置
CMakeSetting.json参考示例:使用mingw64 Qt6.5.3配置,使用 vs202需要在项目
需要在项目、生成、调试中进行编译和运行。
项目–删除缓存/使用cmake调试缓存
生成—全部生成
调试
{
"configurations": [
{
"name": "Mingw64-Debug",
"generator": "Unix Makefiles",
"configurationType": "Debug",
"buildRoot": "${projectDir}/build/",
"installRoot": "${projectDir}/build",
"cmakeExecutable": "C:/DevelopSoftware/Qt6/Tools/CMake_64/bin/cmake.exe",
"cmakeCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "mingw_64" ],
"environments": [
{
"MINGW64_ROOT": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64",
"BIN_ROOT": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/bin",
"FLAVOR": "x86_64-w64-mingw32",
"TOOLSET_VERSION": "9.1.0",
"PATH": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/bin;",
"INCLUDE": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/include;",
"environment": "mingw_64"
}
],
"variables": [
{
"name": "CMAKE_C_COMPILER",
"value": "C:/DevelopSoftware/Qt6/Tools/mingw1120_64/bin/gcc.exe",
"type": "STRING"
},
{
"name": "CMAKE_CXX_COMPILER",
"value": "C:/DevelopSoftware/Qt6/Tools/mingw1120_64/bin/g++.exe",
"type": "STRING"
},
{
"name": "CMAKE_MAKE_PROGRAM",
"value": "C:/DevelopSoftware/Qt6/Tools/mingw1120_64/bin/make.exe",
"type": "FILEPATH"
},
{
"name": "Qt6_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6",
"type": "PATH"
},
{
"name": "Qt6ZlibPrivate_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6ZlibPrivate",
"type": "PATH"
},
{
"name": "Qt6Widgets_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6Widgets",
"type": "PATH"
},
{
"name": "Qt6WidgetsTools_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6WidgetsTools",
"type": "PATH"
},
{
"name": "Qt6WebSockets_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6WebSockets",
"type": "PATH"
},
{
"name": "Qt6Network_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6Network",
"type": "PATH"
},
{
"name": "Qt6HttpServer_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6HttpServer",
"type": "PATH"
},
{
"name": "Qt6Gui_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6Gui",
"type": "PATH"
},
{
"name": "Qt6GuiTools_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6GuiTools",
"type": "PATH"
},
{
"name": "Qt6EntryPointPrivate_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6EntryPointPrivate",
"type": "PATH"
},
{
"name": "Qt6Core_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6Core",
"type": "PATH"
},
{
"name": "Qt6CoreTools_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6CoreTools",
"type": "PATH"
},
{
"name": "WINDEPLOYQT_EXECUTABLE",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/bin/windeployqt.exe",
"type": "FILEPATH"
},
{
"name": "Qt6concurrent_DIR",
"value": "C:/DevelopSoftware/Qt6/6.5.3/mingw_64/lib/cmake/Qt6Concurrent",
"type": "PATH"
}
],
"intelliSenseMode": "linux-gcc-x64"
}
]
}
附CMakeLists.txt
cmake_minimum_required(VERSION 3.20.0)
STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
set(TARGET ${CURRENT_FOLDER})
message("path:" " ${TARGET}")
project(${TARGET})
#PROJECT("TestFlawDectect")
message (">>> top PROJECT_NAME: ${PROJECT_NAME}")
message (">>> top PROJECT_SOURCE_DIR: ${PROJECT_SOURCE_DIR}")
message (">>> top <PROJECT_NAME>_SOURCE_DIR: ${${PROJECT_NAME}_SOURCE_DIR}")
message (">>> top PROJECT_BINARY_DIR: ${PROJECT_BINARY_DIR}")
message (">>> top <PROJECT_NAME>_BINARY_DIR: ${${TOP_PROJECT_NAME}_BINARY_DIR}")
message (">>> top CMAKE_PROJECT_NAME: ${CMAKE_PROJECT_NAME}")
message (">>> top CMAKE_PROJECT_VERSION: ${PROJECT_VERSION}")
#设置目标名称
# set(target_name "QTCMake")
set(target_name ${TARGET})
if (CMAKE_HOST_WIN32)
MESSAGE (STATUS "Current platform: Windows")
# 配置环境 windows 环境
elseif (CMAKE_HOST_APPLE)
MESSAGE (STATUS "Current platform: Mac OS X")
elseif (CMAKE_HOST_UNIX)
MESSAGE (STATUS "Current Other platform: ${CMAKE_SYSTEM_NAME}")
endif ()
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CURRENT_PLATFORM "x64")
message(STATUS "Current Platform is ${CURRENT_PLATFORM}")
else()
set(CURRENT_PLATFORM "x86")
message(STATUS "Current Platform is ${CURRENT_PLATFORM}")
endif()
# if (${CMAKE_BUILD_TYPE} STREQUAL "")
# set(CMAKE_BUILD_TYPE "Debug")
# endif()
message("current complier type: ${CMAKE_BUILD_TYPE}")
#******************************************************打印平台信息********************************************************
message("CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_NAME} ")
message("CMAKE_HOST_SYSTEM: ${CMAKE_HOST_SYSTEM} ")
message("CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME} ")
message("CMAKE_SYSTEM: ${CMAKE_SYSTEM} ")
message("CMAKE_HOST_UNIX: ${CMAKE_HOST_UNIX} ")
message("CMAKE_HOST_WIN32: ${CMAKE_HOST_WIN32} ")
#************************************************ C++标准设置*************************************************************
# cmake -DCMAKE_BUILD_TYPE=Debug ..
#set(CMAKE_BUILD_TYPE Debug CACHE STRING "set build type to debug")
# 设置了但是没有用到,但是要放到CMakeLists的最顶层
# set(CMAKE_MAKE_PROGRAM "C:\\DevelopSoftware\\Qt6\\Tools\\mingw1120_64\\bin\\make.exe")
# set(CMAKE_C_COMPILER "C:\\DevelopSoftware\\Qt6\\Tools\\mingw1120_64\\bin\\gcc.exe")
# set(CMAKE_CXX_COMPILER "C:\\DevelopSoftware\\Qt6\\Tools\\mingw1120_64\\bin\\g++.exe")
set(CMAKE_C_FLAGS "-g -w -O3")
#set(CMAKE_CXX_FLAGS "-g -w -O3 -m64 -std=c++17 -Wall -Werror -fpermissive")
if(NOT MSVC)
add_compile_options(-Wno-dev)
endif()
if(MSVC)
add_compile_options(/Zc:__cplusplus /permissive-)
endif()
#set(CMAKE_CXX_FLAGS "-g -O3 -w -m64 -std=c++17 -Wall -Wno-dev -fpermissive")
set(CMAKE_CXX_FLAGS "-g -O3 -w -m64 -std=c++17 -Wall -fpermissive")
#******************************************************设置可执行文件的输出目录**********************************************
# 设置输出目录
set(OUTPUT_PATH "${CMAKE_CURRENT_SOURCE_DIR}/bin/")
set(EXECUTABLE_OUTPUT_PATH ${OUTPUT_PATH})
#************************************************ Cmake 对Qt的支持********************************************************
# set(CMAKE_PREFIX_PATH "D:\\Qt\\Qt6\\6.5.3\\mingw_64")
set(CMAKE_PREFIX_PATH "C:\\DevelopSoftware\\Qt6\\6.5.3\\msvc2019_64")
#包含当前路径,使用*.ui文件时,需要加上这句,否则找不到头文件
set(CMAKE_INCLUDE_CURRENT_DIR ON)
#打开全局uic
set(CMAKE_AUTOUIC_SEARCH_PATHS "${CMAKE_CURRENT_SOURCE_DIR}/ui") #指定ui文件的路径,不能取消
set(CMAKE_AUTOUIC ON)
#打开全局moc
set(CMAKE_AUTOMOC ON)
#打开全局rcc,如果没有使用qrc,此句可以去掉
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#*************************************************找到Qt需要的包**************************************************************
#查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets concurrent Network HttpServer)
#需要生成的ui文件,必须在find QT5 QT6 package才能调
file(GLOB UIFiles "${CMAKE_CURRENT_SOURCE_DIR}/ui/*.ui")
qt6_wrap_ui(uifiles ${UIFiles})
# 添加资源文件
SET(RCC_FILES "${CMAKE_CURRENT_SOURCE_DIR}/res/resources.qrc")
#需要生成的moc文件,输出文件名称放在变量 mocfiles中,必须在find QT5 QT6 package才能调用
file(GLOB MocHeaderFiles
"${CMAKE_CURRENT_SOURCE_DIR}/include/ui/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/communication/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/data/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/widget/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/service/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/tableDeletage/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/include/FlawDectectImpl/*.h"
"${CMAKE_CURRENT_SOURCE_DIR}/Test/include/*.h"
)
# qt6_wrap_cpp(mocfiles ${MocHeaderFiles}) #如果打开了 set(CMAKE_AUTOMOC ON),则不需要手动qt6_wrap_cpp
#************************************************ Header File***********************************************************
message("CMAKE_CURRENT_SOURCE_DIR: ${CMAKE_CURRENT_SOURCE_DIR}")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/communication)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/data)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/widget)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/service)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/tableDeletage)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/Test/include)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/proto)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include/FlawDectectImpl)
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/debug/include/)
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/release/include/)
else ()
# 其他配置
endif ()
#*************************************************CPP File**************************************************************
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source SOURCE)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/communication COMMUNICATE)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/data DATA_STRUCT)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/widget WIDGET)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/service SERVICE)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/proto PROTO_CC)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/tableDeletage DELETAGE)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/Test/src TEST_WIDGET)
AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/source/FlawDectectImpl FLAW_IMPL)
#******************************************************* 生成proto头文件 cpp文件 ****************************************
#设置protoc的搜索路径
LIST(APPEND PROTO_FLAGS -I${CMAKE_SOURCE_DIR}/data/)
#获取需要编译的proto文件
file(GLOB protobuf_files ${CMAKE_SOURCE_DIR}/data/*.proto)
FOREACH(FIL ${protobuf_files})
GET_FILENAME_COMPONENT(FIL_WE ${FIL} NAME_WE)
string(REGEX REPLACE ".+/(.+)\\..*" "\\1" FILE_NAME ${FIL})
string(REGEX REPLACE "(.+)\\${FILE_NAME}.*" "\\1" FILE_PATH ${FIL})
set(PROTO_SRCS "${CMAKE_CURRENT_SOURCE_DIR}/data/${FIL_WE}.pb.cc")
set(PROTO_HDRS "${CMAKE_CURRENT_SOURCE_DIR}/data/${FIL_WE}.pb.h")
EXECUTE_PROCESS(
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/bin/protoc.exe -I . ${PROTO_FLAGS} --cpp_out=${CMAKE_SOURCE_DIR}/data/ ${FIL}
)
if(EXISTS ${PROTO_HDRS})
message("generate proto header ${PROTO_HDRS}")
endif()
if(EXISTS ${PROTO_SRCS})
message("generate proto src ${PROTO_SRCS}")
endif()
#
# if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/source/proto/${FIL_WE}.pb.cc)
# message("remove proto src ${CMAKE_CURRENT_SOURCE_DIR}/source/proto/${FIL_WE}.pb.cc")
# file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/source/proto/${FIL_WE}.pb.cc)
# endif()
# if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/include/proto/${FIL_WE}.pb.h)
# message("remove proto header ${CMAKE_CURRENT_SOURCE_DIR}/include/proto/${FIL_WE}.pb.h")
# file(REMOVE ${CMAKE_CURRENT_SOURCE_DIR}/include/proto/${FIL_WE}.pbh)
# endif()
# if(EXISTS ${PROTO_SRCS})
# file(COPY ${PROTO_SRCS} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/source/proto)
# endif()
# if(EXISTS ${PROTO_HDRS})
# file(COPY ${PROTO_HDRS} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}/include/proto)
# endif()
file(REMOVE ${PROTO_SRCS})
file(REMOVE ${PROTO_HDRS})
ENDFOREACH()
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(PROTOBUF_LIB protobufd protobuf-lited protocd)
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(PROTOBUF_LIB protobuf protobuf-lite protoc)
endif ()
#************************************************************第三方动态库目录添加*******************************************
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/debug/lib/)
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/release/lib/)
else ()
# 其他配置
endif ()
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/libzip/lib/debug)
LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/spdlog/debug/lib/)
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
# Release 配置
else ()
# 其他配置
endif ()
#*****************************************************编译成可执行文件*****************************************************
#需要将cpp文件、widget文件、widget头文件、ui文件、rcc资源文件都编译进去
set(FLAW_CPP_FILES
${SOURCE}
${COMMUNICATE}
${DATA_STRUCT}
${WIDGET}
${PROTO_CC}
${SERVICE}
${DELETAGE}
${FLAW_IMPL}
${HTTPSERVER}
${TEST_WIDGET}
${MocHeaderFiles}
${uifiles}
${RCC_FILES}
)
# #创建工程文件
add_executable(${target_name} ${FLAW_CPP_FILES})
#************************************************************添加资源文件***********************************************
file(GLOB IMAGEFILES "${CMAKE_CURRENT_SOURCE_DIR}/res/img/*")
qt_add_resources(${target_name}
PREFIX "/" #资源的前缀
FILES
${IMAGEFILES}
)
#********************************************************将库链接到程序 要放在add_executable之后*****************************
#file(GLOB GSL_LIB "${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/gsl/lib/gcc-release/lib/lib*.dll.a")
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set(Protobuf_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/debug/include)
set(Protobuf_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/debug/lib)
find_package(protobuf REQUIRED)
if(Protobuf_FOUND)
message(STATUS "The protobuf library found!")
else ()
message(STATUS "The protobuf library Not found!")
endif()
elseif (${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(Protobuf_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/release/include)
set(Protobuf_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/ThirdPartyLib/protobuf/release/lib)
find_package(protobuf REQUIRED)
if(Protobuf_FOUND)
message(STATUS "The protobuf library found!")
else ()
message(STATUS "The protobuf library Not found!")
endif()
else ()
# 其他配置
endif ()
# #添加Qt依赖项
target_link_libraries(${target_name} PRIVATE
${PROTOBUF_LIB}
Qt6::Core
Qt6::Gui
Qt6::Widgets
Qt6::Concurrent
Qt6::Network
Qt6::HttpServer
)
#***************************设置可执行文件的输出目录******************************
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#***************************设置库文件的输出目录******************************
#SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib) #设置库文件的输出目录
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin) #设置静态库 lib 输出路径
#SET_TARGET_PROPERTIES(dllname PROPERTIES RUNTIME_OUTPUT_DIRECTORY ../bin) #设置动态库输出路径
#***************************设置Debug Releae版本文件的输出目录*************************************
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/Debug) #设置Debug版本文件的输出目录
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/Release) #设置Release版本文件的输出目录
#***************************设置库文件的输出目录*************************************
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${PROJECT_SOURCE_DIR}/../lib) #设置Debug版本库文件的输出目录
#set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${PROJECT_SOURCE_DIR}/../lib) #设置Release版本库文件的输出目录
#PROJECT_SOURCE_DIR:工程的根目录
#PROJECT_BINARY_DIR:运行cmake命令的目录,通常为${PROJECT_SOURCE_DIR}/build
#PROJECT_NAME:返回通过 project 命令定义的项目名称
#CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径
#CMAKE_CURRENT_BINARY_DIR:target 编译目录
#CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径
#EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置
#LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置
注:
VS打开Git上的项目时,有时候会遇到“vs 此声明没有存储类或类型说明符”,重新生成解决方案即可搞定