vs2017与linux(centos7)联合调试记录

之前一直做Windows下的开发,最近需求转到linux,将最近心得写下希望对开发者有所帮助,不对的地方请大神们指正。

网上有很多帖子已经对vs2017建立基本的linux程序步骤做了详细解释,这里不再说明,可参考:

  https://www.cnblogs.com/Harley-Quinn/p/7465517.html

下面主要说一下包含用户头文件和用户库的相关问题:

首先要明确的一点是,vs2017在对linux编译调试时,其主要作用只是一个“驱壳”,帮你把工程里所有的设置以及文件全部准备好,编译时连接到linux上,vs2017本身不做编译及运行。

当vs2017编译时会将工程中所有的文件在linux上会建立一个工程并复制所有相关的文件(除外部依赖)到此。具体设置在工程-》属性-》配置属性-》通用-》远程编译根目录:

基本的解决方案文件树结构如下:

实际文件夹的结构如下:

调试选择gdb或gdbserver,本人机器选择gdb时报出一下错误:

选择gdbserver后正常运行,gdbserver可在https://pkgs.org/download/gdb-gdbserver下载离线包并使用yum install xxxx.rpm.

工程属性设置添加头文件所在目录:

c/c++所有选项:注意附加选项,如果是多线程编译请再次添加-lpthread;c++标准可根据你的要求设置。

工程属性设置添加相关的库名称:设置用到的相关用户库(名称去掉前缀lib),设置库所在路径;

另外,附加选项中参数-Wl,-rpath=<库文件所在路径>设置后,生成的.out文件查找默认库的路径。

编译:

编译成功后会在工程本来所在的目录下生成.out文件;

会在vs自动生成的工程目录下生成.out文件;

用户可直接使用shell运行.out文件来验证,或者方便调试使用vs2017进行单步调试。

另外,虽然有vs2017进行交叉开发,但makefile才是回归的本源,vs2017只是作为辅助工具使用。

作为linux开发者还是需要对makefile有所掌握。这里贴出本人此工程的makefile,当vs2017无法完全运行工程的时候,或者条件不允许时,makefile才是正道:

CXX  = g++ -std=c++11
CC   = gcc

OUT_NAME = QuoteRcv
OBJ_PATH = ./obj/
INC_PATH = ./include/
OUT_PATH = ./bin/
SRC_PATH = ./
LIB_PATH = ./lib/
OUT_TARGET = $(OUT_PATH)$(OUT_NAME)

#SRC_FILE = main.cpp CtpMgr.cpp CtpQuote.cpp PublicFuncs.cpp ShengliMgr.cpp ShengliQuote.cpp tinyxml2.cpp
#all .cpp files and ./
SRC_FILE=$(wildcard $(SRC_PATH) *.cpp)
ALL_FILE=$(notdir $(SRC_FILE))
OBJ_FILE=$(patsubst %.cpp,%.o,$(ALL_FILE))
OBJ_DEBUG_FILE=$(addprefix $(OBJ_PATH),$(notdir $(OBJ_FILE)))

#required libs
LIB_PARAM = -L$(LIB_PATH)ctp/ -lthostmduserapi \
    -L$(LIB_PATH)ctp/ -lthosttraderapi \
    -L$(LIB_PATH)shengli/ -lEESQuoteApi

#include path
INC_PARAM = -I $(INC_PATH)ctp/ -I $(INC_PATH)shengli/

#setup the default lib path when run the out file
LIB_DEFAULT_PATH_PARAM = -Wl,-rpath=$(LIB_PATH)ctp/:$(LIB_PATH)shengli/

BFLAG = -D_LINUX -g -Wall
RM = rm -fr

.PHONY: all all-before all-after clean clean-custom

#main target
all : pre_all $(OUT_TARGET)

$(OUT_TARGET): $(OBJ_DEBUG_FILE)
    $(CXX) $(addprefix $(OBJ_PATH),$(notdir $^))  $(LIB_PARAM) $(LIB_DEFAULT_PATH_PARAM) -o $(OUT_TARGET) 

$(OBJ_PATH)%.o : %.cpp
    $(CXX) -c $(BFLAG) $(INC_PARAM) $(LIB_PARAM) $(SRC_PATH)$< -o $@

pre_all :
    -$(shell mkdir $(OBJ_PATH) -p)
    -$(shell mkdir $(OUT_PATH) -p)
    
clean: clean-custom
    ${RM} $(OBJ_DEBUG_FILE) $(OUT_TARGET)

附:

1. Vs调试时,如何设置当前工作目录问题:

为方便可设置为工程根路径:

猜你喜欢

转载自blog.csdn.net/zyq1987913/article/details/81771740