我试图获得一个在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文件),但是它没有任何改变。
干杯, 太子
答案 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”,>