cmake编译后能给vs使用吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake编译后能给vs使用吗相关的知识,希望对你有一定的参考价值。

C++项目很多都是基于CMake进行组织管理的,自2017年起VS支持cmake项目的直接编译后,对于小型项目,我们可以直接在vs中管理CMake工程,方便我们学习。下面以武汉大学牛小骥老师课题组开源组合导航程序KF-GINS为例说明。

1:打开VS2022 选择:继续但无需代码,如下图
2:选择文件—>打开——>CMake,如下图
3:选择要打开的cmake项目,选择最上层的CMakeLists.txt文件,如下图

打开完成后进入如下页面,工程被编译,可以选择打开CMake设置编辑器,打开类似于CMAKE-GUI的配置界面,也可以在项目栏点击“CMakeSettings.json”打开,进行相应设置

选择Debug模式,重新生成
4:选择启动项,选择Debug模式下生成的exe文件即可进行调试

调试如下:
c++
华为新品发布会即将开启,快来领取你的专属优惠券吧!
精选推荐
广告

Visual Studio 2022编译CMake工程
5421阅读·0评论·1点赞
2022年2月16日
如何在 VS Code 中编译和调试 CMake 项目
1489阅读·0评论·1点赞
2022年8月31日
Windows10中使用VS2022和Cmake编译构建C++开源日志库-spdlog
890阅读·0评论·1点赞
2022年11月19日
VS2022 + Cmake 开发Qt6
1279阅读·0评论·0点赞
2022年6月25日
使用CMake生成sln项目和VS工程遇到的问题
3.1W阅读·2评论·7点赞
2015年3月4日
VS Code安装和使用CMake工具
1997阅读·0评论·1点赞
2020年11月14日
超真实的荒岛生存体验,开局就送SSS级地狱级武器!

精选推荐
广告
windows下Cmake配置vs2022工程
4317阅读·7评论·3点赞
2022年6月18日
vs 打开cmake
2152阅读·0评论·0点赞
2021年8月20日
使用VS自带的命令行编译CMAKE项目
2193阅读·0评论·2点赞
2022年4月13日
Visual Studio 2022 在Windows上编译调试WSL2 CMake跨平台Linux工程
3757阅读·3评论·2点赞
2021年12月26日
VS中的cmake
178阅读·0评论·0点赞
参考技术A 不可以。
cmaKe编译后不能给Vs使用。

cmake:VS2015和GCC编译cJSON

cJSON是基于ANSI C的跨平台JSON解析开源库,在嵌入式应用中使用比较广泛, cJSON支持CMAKE编译,本文以脚本形式提供了使用CMAKE基于VS2015/Windows以及GCC/MinGW的编译过程。

环境要求

cmake 这是必须的编译工具

Visual Studio 2015 OR MinGW for windows

gcc for linux

Visual Studio 2015 编译脚本

msvc_build.bat
要求cJSON源码文件夹与msvc_build.bat脚本在同一级文件夹
执行以下脚本会编译出cJSON动态库、静态库,以及Debug和Release版本并安装到
release\\cJSON_windows_vc_x86_64 文件夹下

:: 基于 Windows Visual Studio 2015 的 cJSON 编译脚本
:: 可选参数:
::   /S              - 编译单元测试
::   /U              - 编译CJSON_UTILS
@ECHO OFF
SETLOCAL
:: 检查是否安装了VS2015
ECHO make paho mqtt VS2015 project
IF NOT DEFINED VS140COMNTOOLS (
	ECHO vs2015 NOT FOUND.
	EXIT /B -1
)
ECHO vs2015 found.
:: 检查是否安装了CMAKE
WHERE cmake
IF ERRORLEVEL 1 (
	ECHO cmake NOT FOUND.
	EXIT /B -1
)
ECHO cmake found
SET sh_folder=%~dp0
:: 删除最后的 '\\'
SET sh_folder=%sh_folder:~0,-1%

SET BUILD_TEST=FALSE
SET BUILD_UTILS=FALSE
:: 解析命令行参数
:loop
IF x%1 == x GOTO :pare_end
IF /I "%1" == "/S"      SET BUILD_TEST=TRUE
IF /I "%1" == "/U"      SET BUILD_UTILS=TRUE

SHIFT
GOTO :loop
:pare_end

:: cJSON源码文件夹名(与当前脚本在同一级文件夹)
SET src_folder=cJSON
SET release_prefix=cJSON

SET cmake_prefix_path=

SET project_folder=%sh_folder%\\build\\%release_prefix%.vs2015
:: 指定安装路径为当前文件夹下release\\cJSON_windows_vc_x86-64
IF "%OUTDIR%x" == "x" SET OUTDIR=%sh_folder%\\release\\%release_prefix%_windows_vc_x86-64

ECHO project_folder=%project_folder%
ECHO OUTDIR=%OUTDIR%

:: 生成项目工程文件
IF EXIST %project_folder% RMDIR %project_folder% /s/q 
MKDIR %project_folder% 
PUSHD %project_folder% || EXIT /B

IF NOT DEFINED VisualStudioVersion (
	ECHO make MSVC environment ...
	CALL "%VS140COMNTOOLS%..\\..\\vc/vcvarsall" x86_amd64
)

ECHO creating x86_64 Project for Visual Studio 2015 ...
CMAKE %sh_folder%\\%src_folder% -G "Visual Studio 14 2015 Win64" -DCMAKE_INSTALL_PREFIX=%OUTDIR% ^
    %cmake_prefix_path% ^
	-DBUILD_SHARED_AND_STATIC_LIBS=ON ^
	-DENABLE_CJSON_UTILS=%BUILD_UTILS% ^
    -DENABLE_CJSON_TEST=%BUILD_TEST% ^
    -DCMAKE_DEBUG_POSTFIX=_d ^
	-DENABLE_TARGET_EXPORT=ON  || EXIT /B

:: 编译Release版
cmake --build . --config Release --target install -- /maxcpucount || EXIT /B
:: 编译Debug版
cmake --build . --config Debug   --target install -- /maxcpucount || EXIT /B
POPD
ENDLOCAL

GNU C编译脚本

gnu_build.sh
要求cJSON源码文件夹与gnu_build.sh脚本在同一级文件夹
执行以下脚本同会编译出cJSOn动态库、静态库,并安装到release/cJSON-$machine 文件夹下
如果未指定环境变量BUILD_TYPEDEBUG,默认编译Release版本

#!/bin/bash
# cJSON 编译脚本(支持交叉编译)
# Optional Command Arguments:
#    ONLYBUILD   不执行 cmake 创建工程只编译版本
#	 BUILD_UTILS build cjson utils
#	 BUILD_TEST  build test
# Optional Environment Variables: 
#    TOOLCHAIN_FILE 指定交叉编译的工具链文件
# 	 MACHINE 目标平台, such as x86_64-linux-gnu,默认使用当前系统平台
#    PREFIX 安装路径
#    PROJECT_FOLDER cmake 生成的工程文件(Makefile)文件夹
#    BUILD_TYPE 编译版本类型(DEBUG|RELEASE),默认 RELEASE

#字符串转大写
#参数:1字符串
function string_toupper()
{
    echo $1 | tr '[a-z]' '[A-Z]'
}
sh_folder=$(cd "$(dirname $0)"; pwd -P)
folder_name=$(basename $sh_folder) 
# 定义编译的版本类型(DEBUG|RELEASE)
build_type=RELEASE
[[ "$(string_toupper $BUILD_TYPE)" =~ DEBUG|RELEASE ]] && build_type=$(string_toupper ${BUILD_TYPE})

echo build_type=$build_type

# 执行 cmake 创建工程
create_prj=ON
build_utils=OFF
build_test=OFF
while [[ $# -gt 0 ]]
do
# 转大写
key=$(string_toupper ${1})
case $key in
ONLYBUILD)
	create_prj=OFF;shift;;
BUILD_UTILS)
	build_utils=ON;;
BUILD_TEST)
	build_test=ON;;
*) shift;;
esac
done

machine=$(g++ -dumpmachine)

[ -n "$MACHINE" ] && machine=$MACHINE

# 工具链文件
toolchain=
[ -n "$TOOLCHAIN_FILE" ] && toolchain="-DCMAKE_TOOLCHAIN_FILE=$TOOLCHAIN_FILE"

# 安装路径
[ -n "$PREFIX" ] && install_prefix="$PREFIX"
[ -z "$PREFIX" ] && install_prefix=$sh_folder/release/cJSON-$machine

# 编译路径
[ -n "$PROJECT_FOLDER" ] && prj_folder="$PROJECT_FOLDER"
[ -z "$PROJECT_FOLDER" ] && prj_folder=$sh_folder/build/cJSON-$machine

echo =========================================================================
echo       Configuration: cJSON $machine:$build_type
echo     Build Directory: $prj_folder
echo   Install Directory: $install_prefix
echo =========================================================================

if [[ "${create_prj}" = ON ]]
then
	[ -d $prj_folder ] && rm -fr $prj_folder
	mkdir -p $prj_folder || exit 

	pushd $prj_folder || exit
	echo "creating Project for $machine ..."
	cmake "$sh_folder/cJSON" -G "Eclipse CDT4 - Unix Makefiles" -DCMAKE_BUILD_TYPE=$build_type \\
		-DCMAKE_INSTALL_PREFIX=$install_prefix \\
		-DCMAKE_POSITION_INDEPENDENT_CODE=ON \\
		-DBUILD_SHARED_AND_STATIC_LIBS=ON \\
		-DENABLE_CJSON_UTILS=$build_utils \\
    	-DENABLE_CJSON_TEST=$build_test \\
		-DCMAKE_DEBUG_POSTFIX=_d \\
		-DENABLE_TARGET_EXPORT=ON \\
		-DENABLE_CUSTOM_COMPILER_FLAGS=OFF \\
		$toolchain || exit

else
	pushd $prj_folder || exit
fi

cmake --build . --target install/strip -- -j8 || exit 

popd


cjson.build

以上完整脚本参见码云仓库 https://gitee.com/l0km/cjson.build.git

如果你只想编译cJSON,可以如下直接克隆 https://gitee.com/l0km/cjson.build.git 这个项目到本地(一定要加--recursive参数)

git clone --recursive https://gitee.com/l0km/cjson.build.git

然后执行其中的msvc_build.batgnu_build.sh就可以编译出你想要的cJSON

以上是关于cmake编译后能给vs使用吗的主要内容,如果未能解决你的问题,请参考以下文章

cmake:VS2015和GCC编译cJSON

cmake:VS2015和GCC编译cpp_redis

vs2017+opencv+qt+cuda,使用cmake编译opencv的库

使用 WSL 和 VS2019 进行 Cmake

VS2022使用cmake配置QPanda2量子计算框架库

VS2022使用cmake配置QPanda2量子计算框架库