将 Linux Makefile 工程转换成 VS 工程

本文以 redis 为例说明如何用 VS 编译和调试 Linux 下的工程

环境
Windows 10
VS 2019
CentOS 7(虚拟机)
redis-5.0.5

Step 1 安装 VS 2019

到微软官网下载最新 VS(目前是 2019), 个人使用可以用 community 版本,安装时注意要安装 Linux 组件

Step 2 源码准备

下载 redis 源码包,放到 Linux 的 /root/projects 目录并解压

Step 3 设定网络共享,将 /root/projects 共享

注:Linux 最好设置为静态 IP

  1. 安装 samba
1
sudo yum install samba samba-client
  1. 修改 samba 配置
1
vim /etc/samba/smb.conf

在最后增加一段,其中 /root/projects 是要共享的目录

1
2
3
4
[share-root]
path = /root/projects
valid users=root
writable=yes
  1. 重启 smb 服务
1
systemctl restart smb
  1. 设置共享目录读写权限
1
chmod -R 777 /root/projects
  1. 关闭linux防火墙
1
systemctl  stop  firewalld
  1. 关闭 selinux

如果是临时关闭,可以用下面的命令关闭,不需要重启

1
setenforce 0

如果要一直关闭,可以修改文件 /etc/sysconfig/selinux,修改成 SELINUX=disabled

这时应该可以在 windows 用 \IP 访问到 Linux 的目录

  1. 创建映射网络驱动器

在 windows “我的电脑” 里创建映射网络驱动器

创建后会多出一个网络驱动器 Z

Step 4 生成 VS 工程文件,设定生成命令和生成目录

  1. 下载 vclinux https://github.com/robotdad/vclinux
    下载回来的是两个 sh 脚本,放到任意的目录(如 /root/bin)

  2. 执行生成命令

    1
    2
    cd /root/projects
    sh /root/bin/genvcxproj.sh redis-5.0.5 redis-5.0.5.vcxproj

    执行后,会生成 /root/projects/redis-5.0.5/redis.vcxproj 文件

  3. 设定生成命令和生成目录
    在 VS 中打开 redis.vcxproj (通过 Z 盘)
    打开项目属性,设定输出目录,注意选项正确的平台(X86)

    设定远程生成命令

    完成后,按 F7 生成 redis。生成的程序文件输出到 /root/projects/redis-output/bin

Step 5 远程调试设定

  1. 设定调试程序和参数,这里调试 redis-server

    复制 redis.conf 到 /root/projects/redis-output/conf 目录
1
2
3
cd /root/projects/redis-output
mkdir conf
cp /root/projects/redis-5.0.5/redis.conf conf/
  1. 设定远程调试参数
    在“工具->选项”菜单中的“跨平台”页设定 SSH 连接参数

  2. 开始调试
    打开 server.c, 在 main 函数打断点,然后按 F5 开始调试

可选步骤

  1. CentOS 7 升级到 gcc 7.3
    默认的 gcc 版本比较低,一些 C/C++ 的新功能无法使用,需要升级
1
2
3
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
scl enable devtoolset-7 bash

升级后的效果
gcc 版本
scl 命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。如果要长期使用 gcc 7.3的话,可以修改 profile 文件

1
echo "source /opt/rh/devtoolset-7/enable" >> /etc/profile