• FastXML代码编译和调试支持


    FastXML代码编译和调试支持

    平台:windows + vscode
    编译器:cl.exe (MSVC 14.30.30705,推荐通过visual studio安装)

    编译+链接

    FastXML源代码提供了用于代码编译的Makefile.win。但问题是编译后无法调试,也就是编译的时候没有存储调试信息。

    注意到在Windows平台下编译是利用的cl.exe,而似乎不能是gcc/g++(FastXML用到了一些库是msvc特有的),所以需要在Makefile.win里面指定cl编译选项/Zi

    指定/Zi之后仍然有问题,发现调试的时候程序不会在断点处暂停,经排查得知gdb根本无法读取cl编译后的调试信息(有可能是gdb版本问题)。按照引用
    得到解决,主要是launch.json的配置不能采用gdb,而应该是cl(cl既能编译也能调试)。
    launch.json

    {
        // 使用 IntelliSense 了解相关属性。 
        // 悬停以查看现有属性的描述。
        // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
        "version": "0.2.0",
        "configurations": [
            {
                "name": "cl.exe - 生成和调试活动文件",
                "type": "cppvsdbg",
                "request": "launch",
                "program": "${fileDirname}\\binaries\\Windows\\${fileBasenameNoExtension}.exe",
                "args": [],
                "stopAtEntry": false,
                "cwd": "${workspaceFolder}",
                "environment": [],
                "externalConsole": false,
                "preLaunchTask": "cl.exe build active file"
            }
        ]
    }
    

    我也对Makefile.win做了一定的修改:

    INC=/I..\Tools\c++
    CXXFLAGS=/O2
    all: fastXML_train fastXML_predict
    
    fastXML_train:
    	cl /Zi /EHsc \
    	/Fe:binaries\Windows\fastXML_train.exe \
    	/Fo:binaries\Windows\ \
    	$(CXXFLAGS) \
    	$(INC) \
    	fastXML_train.cpp \
    	fastXML.cpp \
    	..\Tools\c++\mat.cpp
    
    fastXML_predict:
    	cl /Zi /EHsc \
    	/Fe:binaries\Windows\fastXML_predict.exe \
    	/Fo:binaries\Windows\ \
    	$(CXXFLAGS) \
    	$(INC) \
    	fastXML_predict.cpp \
    	fastXML.cpp \
    	..\Tools\c++\mat.cpp
    
    clean:
    	del /f \
    	binaries\Windows\fastXML_train.exe \
    	binaries\Windows\fastXML_train.ilk \
    	binaries\Windows\fastXML_train.pdb \
    	binaries\Windows\fastXML_train.obj \
    	binaries\Windows\fastXML_predict.exe \
    	binaries\Windows\fastXML_predict.ilk \
    	binaries\Windows\fastXML_predict.pdb \
    	binaries\Windows\fastXML_predict.obj \
    	binaries\Windows\fastXML.obj \
    	binaries\Windows\mat.obj \
    

    用法:

    cd FastXML
    # 会在binaries/Windows文件夹下生成.obj文件, pdb文件, ilk文件, .exe文件
    nmake -f Makefile.win
    # 清除已生成的文件
    nmake -f Makefile.win clean
    

    单独编译+链接

    也可以采用单独编译的方法(不使用makefile),需要配置tasks.json如下:

    {
        "version": "2.0.0",
        "tasks": [
            {
                "type": "cppbuild",
                "label": "Compile with CL",
                "command": "cl.exe",
                "args": [
                    "/O2",
                    "/Zi",
                    "/c",
                    "/EHsc",
                    "/Fo:${fileDirname}\\binaries\\Windows\\${fileBasenameNoExtension}.obj",
                    "${file}",
                    "/I${workspaceFolder}\\Tools\\c++"
                ],
                "options": {
                    "cwd": "${fileDirname}"
                },
                "problemMatcher": [
                    "$msCompile"
                ],
                "group": "build",
                "detail": "编译器: cl.exe"
            }
        ]
    }
    

    注意需要指定编译选项/c表示只编译,不链接。
    如上会在binaries\Windows文件夹下生成.obj文件
    链接命令:

    link /DEBUG:FULL binaries/Windows/fastXML_train.obj binaries/Windows/fastXML.obj binaries/Windows/mat.obj /OUT:binaries/Windows/fastXML_train.exe
    link /DEBUG:FULL binaries/Windows/fastXML_predict.obj binaries/Windows/fastXML.obj binaries/Windows/mat.obj /OUT:binaries/Windows/fastXML_predict.exe
    

    这样就在binaries/Windows文件夹生成了.exe文件。

  • 相关阅读:
    KeyDB源码解析一——网络模型
    FPGA零基础学习:图像显示系统设计
    全方位深度测评AI代码助手Amazon CodeWhisperer
    武汉智能网联道路智能化建设规范
    时间戳的拓展及应用实例
    UE5 Sequencer 使用指导 - 学习笔记
    [vue3] 实现登录页面不使用整体框架
    Golang 切片
    初识JavaScript
    VTK中Clip/Trim总结
  • 原文地址:https://blog.csdn.net/wuyanxue/article/details/126958233