安装配置 Samba

通过如下命令安装 samba

sudo yum -y install samba

然后编辑配置文件 /etc/samba/smb.conf,将 browseable 置为 yes

[homes]
        comment = Home Directories
        valid users = %S, %D%w%S
        browseable = Yes
        read only = No
        inherit acls = Yes

添加防火墙规则:

RHEL/CentOS 6.x:

~]# iptables -I INPUT -p udp -m multiport  --dport 137,138 -j ACCEPT
~]# iptables -I INPUT -p tcp -m state --state NEW -m multiport --dport 139,445 -j ACCEPT

~]# service iptables save

RHEL/CentOS 7.x:

~]# firewall-cmd --permanent --add-port={139/tcp,445/tcp}
~]# firewall-cmd --reload

启动 samba 服务:

RHEL/CentOS 6.x:

~]# chkconfig  smb on
~]# service smb restart

RHEL/CentOS 7.x:

~]# systemctl enable smb
~]# systemctl start smb

添加 samba 用户,此用户必须在 Linux 系统中存在:

~]# smbpasswd -a example
New SMB password: password
Retype new SMB password: password
Added user example.

~]# smbpasswd -e example

Visual Studio 2017 工程配置

通过 Samba 打开 Linux 上的工程目录,点击鼠标右键,选择 Open in Visual Studio

image

打开 Visual Studio 2017 后会提示如下窗口,这个是因为通过 Samba 创建的 .vs 目录权限不足,无法生成索引,如果点击 OK 则会在 Windows 本地生成索引,这里选择 Cancel ,然后退出 Visual Studio 2017 :

image

退出后,在 Linux 上的工程目录中执行如下命令,在 .vs 目录上添加权限:

]$ chmod 777 -R .vs

然后再通过 Samba 打开 Linux 上的工程目录,鼠标右键打开 Visual Studio 2017,在上方的下拉框中选择 Manage Configurations ...

image

在弹出的对话框中选择 Linux-Debug

image

然后会在工程目录生成一个配置文件 CMakeSettings.json,默认配置如下 :

{
  "configurations": [
    {
      "name": "Linux-Debug",
      "generator": "Unix Makefiles",
      "remoteMachineName": "${defaultRemoteMachineName}",
      "configurationType": "Debug",
      "remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
      "cmakeExecutable": "/usr/local/bin/cmake",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
      "remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
      "remoteCopySources": true,
      "remoteCopySourcesOutputVerbosity": "Normal",
      "remoteCopySourcesConcurrentCopies": "10",
      "remoteCopySourcesMethod": "rsync",
      "remoteCopySourcesExclusionList": [
        ".vs",
        ".git"
      ],
      "rsyncCommandArgs": "-t --delete --delete-excluded",
      "remoteCopyBuildOutput": false,
      "cmakeCommandArgs": "",
      "buildCommandArgs": "",
      "ctestCommandArgs": "",
      "inheritEnvironments": [
        "linux_x64"
      ]
    }
  ]
}

但默认配置还不能使用,我们需要修改一些参数:

  • remoteCopySources 配置成 false,因为我们是通过 samba 共享的工程,所以不需要同步代码。
  • generator 置空,这应该是 vs2017 linux 插件的 bug,如果使用 默认配置,无法成功。
  • remoteCMakeListsRoot,配置成工程在 linux 上的绝对目录。
  • buildRootinstallRoot,置空。
  • remoteBuildRoot,CMake 编译工程目录
  • remoteInstallRoot,CMake 安装目录

配置完成后,在 Linux 上的工程 build 目录 执行 cmake <projects path>,例如:

]$ cmake ..
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
......

接下来配置调试参数,点击菜单 cmake -> Debug and Launch Settings -> test

image

选择一个可执行程序,这里的例子为 test,会成成一个 Debug 配置文件 launch.vs.json

{
  "version": "0.2.1",
  "defaults": {},
  "configurations": [
    {
      "type": "cppdbg",
      "name": "test",
      "project": "CMakeLists.txt",
      "projectTarget": "test",
      "cwd": "${debugInfo.remoteWorkspaceRoot}",
      "program": "${debugInfo.fullTargetPath}",
      "MIMode": "gdb",
      "args": ["a", "b"],
      "externalConsole": true,
      "remoteMachineName": "${debugInfo.remoteMachineName}",
      "pipeTransport": {
        "pipeProgram": "${debugInfo.shellexecPath}",
        "pipeArgs": [
          "/s",
          "${debugInfo.remoteMachineId}",
          "/p",
          "${debugInfo.parentProcessId}",
          "/c",
          "${debuggerCommand}",
          "--tty=${debugInfo.tty}"
        ],
        "debuggerPath": "/usr/bin/gdb"
      },
      "setupCommands": [
        {
          "text": "-enable-pretty-printing",
          "ignoreFailures": true
        }
      ],
      "visualizerFile": "${debugInfo.linuxNatvisPath}",
      "showDisplayString": true
    }
  ]
}

如果执行程序需要运行参数,需要在配置文件中添加一行 :

"args": ["a", "b"],

然后就可以按 F5 编译调试程序了:

image