前言
补充上篇 有了cmake的支持 linux的开发也就更顺手了。
本来用Solution联调linux已经很爽了。最近项目在搞华为昇腾AI平台项目,因工程是cmake的 大家在vs2019下不知咋配居然就用上clion的开发。不能说不好,试用了3天确实受不了。怪我太小白 还是Visual Studio搞起。
步骤如下:
1.远程linux端配置
确保安装了下面的包(有的话 不需要装 我只是把用到的都列出来了)
sudo apt install gcc gdb rsync zip ninja-build cmake openssh-server
2.安装vs2019 勾选Linux开发选项
(不勾win下的开发 只安装linux的开发环境大概耗300多M磁盘 所以不必惊慌) .
过程略.
3.vs2019中关于Linux相关的设置介绍.
创建cmake linux工程 我这里还是用树莓派做例子
也可以打开导入已有的cmake工程 找到cmakelist.txt位置如下图:
在工程树中找到cmakelist.txt右键点 xxx 的 cmake 设置 就会自动创建CMakeSettings.json文件
点cmake设置的加号添加linux配置项 如下:
绿色框选菜单就是cmake一些设置 其实就是CMakeSettings.json这玩意 可以记事本打开看。
红色框选菜单就是cmake生成项目
灰色框选菜单是cmake清理
配置如果没有问题 cmake生成项目后 就可以点绿色的按钮下拉找到工程名编译调试了
看到下面调用堆栈 线程 ... vs的千年不变的环境又回来了。
cmakesettings.json如下 如果还有问题多多检查这个文件 下面我做了注释。
{
"configurations": [
{
"name": "x64-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"inheritEnvironments": [ "msvc_x64_x64" ],
"buildRoot": "${projectDir}\\out\\build\\${name}",
"installRoot": "${projectDir}\\out\\install\\${name}",
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"variables": []
},
{
"name": "Linux-GCC-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"cmakeExecutable": "/usr/bin/cmake", //很重要的cmake位置 确保能用
"remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ],
"remoteMachineName": "${defaultRemoteMachineName}",
"remoteCMakeListsRoot": "$HOME/PI3Work/src", //源码同步到设备的路径
"remoteBuildRoot": "$HOME/PI3Work/out/build/${name}", //编译中间的路径
"remoteInstallRoot": "$HOME/PI3Work/out/install/${name}", //生成安装的路径
"remoteCopySources": true,
"rsyncCommandArgs": "-t --delete --delete-excluded",
"remoteCopyBuildOutput": false,
"remoteCopySourcesMethod": "rsync",
"addressSanitizerRuntimeFlags": "detect_leaks=0",
"variables": []
"remoteCopyAdditionalIncludeDirectories": [ "/home/wtoe/opencv-4.2.0-build", "/home/HwHiAiUser/mxVision", "" ]
}
]
}
"remoteCopyAdditionalIncludeDirectories": [ "/home/wtoe/opencv-4.2.0-build", "/home/HwHiAiUser/mxVision", "" ]
最后一句这个参数看到没 vs同步头文件时除/usr/include /usr/local/ 外添加这个参数就可以同步其他位置的第三方库头文件识别了,快试试 是不是可以ctrl点进去了。
到此为止其实vs就是多了一个cmakesettings.json文件和其他同事的clion也不冲突这点非常好了。
最后补充一点 有发现有小伙伴git上传的so工程vs无法调试进不了断点,后来分析GCC参数
去修改下cmakelist.txt 已解决
target_link_libraries(${TARGET_LIBRARY} -Wl,-z,relro,-z,now,-z,noexecstack)
#target_link_libraries(${TARGET_LIBRARY} -Wl,-z,relro,-z,now,-z,noexecstack -s)
其他的编译问题应该就是CMakelist上的问题了。