VSCode动态链接-C ++ Boost测试

时间:2019-01-20 21:27:00

标签: c++ boost visual-studio-code

我试图获得一个在VSCode中运行的Boost单元测试程序,但是在链接库时遇到了麻烦。

我编写了一个简单的单元测试设置,其中包含两个类,即Boost Test和FakeIt模拟框架,并轻松地验证了它在VS2017中的工作。最终的动机是使它最终在VSCode中工作。 当我构建项目时,它找不到增强测试文件。我尝试了几种不同的包含选项;绝对路径,相对路径以及环境变量(如下面的c_cpp_properties.json所示)。

tasks.json

{
"version": "2.0.0",
"tasks": [
    {
        "label": "echo",
        "type": "shell",
        "command": "g++ -g -Wall main.cpp -L/c:/boost/lib64-msvc-14.1 -llibboost_unit_test_framework-vc141-mt-gd-x64-1_69",
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]
}

launch.json

{
"version": "0.2.0",
"configurations": [
    {
        "name": "(gdb) Launch",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/a.exe",
        "args": [],
        "stopAtEntry": false,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": true,
        "MIMode": "gdb",
        "miDebuggerPath": "C:/MinGW/bin/gdb.exe",
        "preLaunchTask": "echo",
        "setupCommands": [
            {
                "description": "Enable pretty-printing for gdb",
                "text": "-enable-pretty-printing",
                "ignoreFailures": true
            }
        ]
    }
]
}

c_cpp_properties.json

{
"configurations": [
    {
        "name": "Win32",
        "includePath": [
            "${workspaceFolder}/**",
            "${env:BOOST_ROOT}",
            "${env:FAKEIT}"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE"
        ],
        "windowsSdkVersion": "10.0.17763.0",
        "compilerPath": "C:/MinGW/bin/gcc.exe",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "gcc-x64",
        "browse": {
            "path": [
                "${C:/MinGW/lib/gcc/mingw32/6.3.0/include/c++}"
            ]
        }
    }
],
"version": 4
}

我得到的是

Executing task: g++ -g main.cpp <

main.cpp:3:10: fatal error: boost/test/unit_test.hpp: No such file or directory
 #include <boost/test/unit_test.hpp>
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
The terminal process terminated with exit code: 1

我是否正确设置了构建文件?习惯于VS2017,我对手动编写构建文件还很陌生,但是我确实在VSCode Cpp中制作了一个可正常工作的Hello World程序,因此这并不是说编译器无法正常工作。希望有人可以提供帮助,我可以根据要求提供cpp / h文件,但是鉴于我知道它可以在VS2017中使用,因此这似乎是不必要的。

Edit1:我什至可以右键单击Boost和FakeIt包含的内容,然后单击“转到定义”,它会打开文件,但是当我尝试构建它时,它说它不能...?!

Edit2:在搜索了makefile编译器命令后,我将该命令更新为

g++ -g -Wall main.cpp -L/c:/boost/lib64-msvc-14.1 
-llibboost_unit_test_framework-vc141-mt-gd-x64-1_69

,试图告诉编译器链接库(该文件夹中同时存在.lib和.dll文件),但是它没有任何改变。

干杯, 太子

1 个答案:

答案 0 :(得分:0)

我不确定您为什么认为这是链接问题,错误消息肯定告诉您这是编译问题。可以肯定地知道的消息部分是:

  

编译终止。

如果这是链接问题,则gcc链接器会说一些有关“链接失败”的信息。

这是编译问题的另一个提示是:

  

main.cpp:3:10:致命错误:boost / test / unit_test.hpp:没有此类文件或目录

这是c预处理程序,告诉您找不到源代码要求的文件。包括发生在编译时而不是链接时。

您的问题只是您忘记告诉编译器此行上task.json中的boost头在哪里:

  

“命令”:“ g ++ -g -Wall main.cpp -L / c:/boost/lib64-msvc-14.1 -llibboost_unit_test_framework-vc141-mt-gd-x64-1_69”,

-L选项告诉链接器在哪里可以找到文件(不是编译器)。它需要阅读:

  

“命令”:“ g ++ -g -Wall main.cpp -Ic:/ boost -L / c:/boost/lib64-msvc-14.1 -llibboost_unit_test_framework-vc141-mt-gd-x64-1_69”,

相关问题