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

您所在的位置:网站首页 vs如何修改项目路径 visual studio 2017创建Cmake项目,并修改默认工作目录

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

2024-07-11 15:49| 来源: 网络整理| 查看: 265

使用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 此声明没有存储类或类型说明符”,重新生成解决方案即可搞定



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3