visual studio 2017创建Cmake项目,并修改默认工作目录

使用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参考示例:

{
  "configurations": [
    {
      "name": "x64-Debug",
      "generator": "Visual Studio 15 2017 Win64", //Visual Studio 15 2017 Win64  Ninja
      "configurationType": "Debug", //生成器的生成配置类型。 当前支持的值为“Debug”、“MinSizeRel”、“Release”和“RelWithDebInfo”。 它映射到 CMAKE_BUILD_TYPE。
      "inheritEnvironments": [ // 定义用于生成所选配置的编译器环境
        "msvc_x64_x64"
      ],    
      "buildRoot": "D:\\Workspace\\CMakeProject\\build",
      "installRoot": "D:\\Workspace\\CMakeProject\\bin",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    }
  ]
}

附CMakeLists.txt

cmake_minimum_required(VERSION 3.8.0)

STRING( REGEX REPLACE ".*/(.*)" "\\1" CURRENT_FOLDER ${CMAKE_CURRENT_SOURCE_DIR} )
set(TARGET ${CURRENT_FOLDER})
message(path ${TARGET})

project(${TARGET} VERSION 0.1.0)
#********************* Cmake 对Qt5的支持******************************
#包含当前路径,使用*.ui文件时,需要加上这句,否则找不到头文件
#set(CMAKE_INCLUDE_CURRENT_DIR ON)
#打开全局uic
#set(CMAKE_AUTOUIC ON)
#打开全局moc
#set(CMAKE_AUTOMOC ON)
#打开全局rcc,如果没有使用qrc,此句可以去掉
#set(CMAKE_AUTORCC ON)

#set (CMAKE_PREFIX_PATH "D:\\Qt5.12.10\\5.12.10\\msvc2017_64\\") 
#查找需要的Qt库文件,最好每一个库都要写,Qt也会根据依赖关系自动添加
#find_package(Qt5 REQUIRED Widgets Qml Quick)


#需要生成的moc文件,输出文件名称放在变量 mocfiles中,必须在find QT5 package才能调用
#qt5_wrap_cpp(mocfiles widget.h)
#source_group("moc" FILES ${mocfiles})

#需要生成的ui文件,必须在find QT5 package才能调用
#qt5_wrap_ui(uifiles widget.ui)

#设置目标名称
#set(target_name ${project_name})
#创建工程文件
#add_executable(${target_name} main.cpp widget.cpp widget.h widget.ui resources/resources.qrc)
#添加Qt5依赖项
#target_link_libraries(${target_name} Qt5::Widgets Qt5::Qml Qt5::Quick)

#设置目标关联的*.h, *.cpp 使用 Qt moc进行编译
#set_target_properties(${target_name} PROPERTIES AUTOMOC ON)
#设置目标关联的*.ui 使用 Qt uic进行编译
#set_target_properties(${target_name} PROPERTIES AUTOUIC ON)
#设置目标关联的*.qrc 使用 Qt uic进行编译
#set_target_properties(${target_name} PROPERTIES AUTORCC ON)
#*********************在使用cmake时指定debug 后者 Release ******************************
#cmake .. -DCMAKE_BUILD_TYPE=Debug
#cmake .. -DCMAKE_BUILD_TYPE=Release

#设置编译模式
#set(CMAKE_BUILD_TYPE "Debug" )

# Debug模式下的编译指令
#SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")  
# Release模式下的编译指令
#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")         

#*********************在使用cmake时指定编译器******************************
#set (CMAKE_C_COMPILER "/usr/local/gcc/bin/gcc")
#set (CMAKE_CXX_COMPILER "/usr/local/gcc/bin/g++")

#********************* C++编译器的参数选项******************************
#set(CMAKE_C_FLAGS   "${CMAKE_C_FLAGS} -g -w -O3")
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -w -O3 -std=c++11 -Wall -Werror")

#********************* C++标准设置******************************
#set(CMAKE_CXX_STANDARD 11)
#set(CMAKE_CXX_STANDARD_REQUIRED ON)

#********************* Header File******************************
INCLUDE_DIRECTORIES(./)
INCLUDE_DIRECTORIES(./CMakeProject)

#**********************CPP File***************************************
AUX_SOURCE_DIRECTORY(./ DIR_SRC_MAIN)
AUX_SOURCE_DIRECTORY(./CMakeProject DIR_SRC)
set(SrcFile ${DIR_SRC_MAIN} ${DIR_SRC})
#*********************动态库的添加*******************************
#link_directories(${PROJECT_SOURCE_DIR}/lib) #添加动态连接库的路径
#target_link_libraries(project_name -lmxnet ) #添加libmxnet.so
#LINK_DIRECTORIES(./win/lib/x64/vc15/lib)			#添加动态连接库的路径,windows下添加的是.lib
#*********************静态库的添加*******************************
#add_library(mxnet STATIC IMPORTED)
#set_property(TARGET mxnet PROPERTY IMPORTED_LOCATION /path/to/libmxnet.a)
#target_link_libraries(project_name mxnet ) #添加libmxnet.a
#*********compile execu file*******************************************************
add_executable(${TARGET} ${SrcFile})		#编译为可执行程序
#add_library(project1 ${src})				#编译为静态库
#add_library(project1 SHARED ${src})   	    #编译为动态链接库

#************************将库链接到程序 要放在add_executable之后****************************************
#TARGET_LINK_LIBRARIES(${TARGET} libavcodec.so libavdevice.so libavfilter.so  libavformat.so libavutil.so libpostproc.so libswresample.so)
#TARGET_LINK_LIBRARIES(${TARGET} -lavcodec -lavdevice -lavfilter -lavformat -lavutil -lpostproc -lswresample)
#以opencv为例
TARGET_LINK_LIBRARIES(${TARGET} opencv_calib3d460d opencv_core460d 
								opencv_dnn460d opencv_features2d460d 
								opencv_flann460d opencv_gapi460d 
								opencv_highgui460d opencv_imgcodecs460d
								opencv_imgproc460d opencv_ml460d
								opencv_objdetect460d  opencv_photo460d
								opencv_stitching460d  opencv_video460d opencv_videoio460d
						)
#***************************设置可执行文件的输出目录******************************
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 此声明没有存储类或类型说明符”,重新生成解决方案即可搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值