microsoft / microsoft/vscode-cmake-tools
Cannot build googletest example using MSYS2 and cmake-tools
- Dominant language
- TypeScript
- Stars
- 1.7k
- Forks
- 546
- Avg merge
- 2d 16h
- Merged PRs (30d)
- 32
Description
### Brief Issue Summary
Building the googletest example from [googletest: Quickstart: Building with CMake](https://google.github.io/googletest/quickstart-cmake.html) in Visual Studio Code using cmake-tools and MSYS2 on Windows 10 fails.
Notes:
It succeeds from the MSYS2 MinGW64 terminal.
It succeeds with cmake-tools when I select a Windows (VS Studio) toolchain instead of MSYS2.
(Maybe this is more a question on how to get it build with cmake-tools or if cmake-tools is intended to work with MSYS2)
Prerequisites:
- Visual Studio Code and the cmake-tools extension installed and
- [MSYS2 is installed](https://www.msys2.org/#installation)
- [cmake metapackage](https://packages.msys2.org/base/mingw-w64-cmake) is installed in MSYS2
- [ninja metapackage](https://packages.msys2.org/base/mingw-w64-ninja) is installed in MSYS2:
Reproduction steps:
1. Put MSYS2 MinGW64 directory on (user) path. (See also issue https://github.com/microsoft/vscode-cmake-tools/issues/2447)
2. Start VS Code
3. Create the source files and cmake files according to the example mentioned above
4. Start configuration in cmake-tools using the toolchain detected by cmake-tools: GCC [...]
5. Build the project using cmake-tools
Build failes with:
```
[...]
[build] [10/10 100% :: 13.728] Linking CXX executable hello_test.exe
[build] FAILED: hello_test.exe hello_test[1]_tests.cmake C:/swdev/googletestExampleVisualStudioCode/build/hello_test[1]_tests.cmake
[build] cmd.exe /C "cd . && C:\msys64\mingw64\bin\g++.exe -g CMakeFiles/hello_test.dir/hello_test.cc.obj -o hello_test.exe -Wl,--out-implib,libhello_test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 lib/libgtest_main.a lib/libgtest.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cmd.exe /C "cd /D C:\swdev\googletestExampleVisualStudioCode\build && C:\msys64\mingw64\bin\cmake.exe -D TEST_TARGET=hello_test -D TEST_EXECUTABLE=C:/swdev/googletestExampleVisualStudioCode/build/hello_test.exe -D TEST_EXECUTOR= -D TEST_WORKING_DIR=C:/swdev/googletestExampleVisualStudioCode/build -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=hello_test_TESTS -D CTEST_FILE=C:/swdev/googletestExampleVisualStudioCode/build/hello_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_XML_OUTPUT_DIR= -P C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake""
[build] CMake Error at C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake:83 (message):
[build] Error running test executable.
[build]
[build] Path: 'C:/swdev/googletestExampleVisualStudioCode/build/hello_test.exe'
[build] Result: Exit code 0xc0000139
[build]
[build]
[build]
[build] Output:
[build]
[build]
[build] Call Stack (most recent call first):
[build] C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake:179 (gtest_discover_tests_impl)
[build]
[build]
[build] ninja: build stopped: subcommand failed.
[build] Build finished with exit code 1
```
### CMake Tools Diagnostics
```
{
"os": "win32",
"vscodeVersion": "1.65.2",
"cmtVersion": "1.10.5",
"configurations": [
{
"folder": "c:\\swdev\\googletestExampleVisualStudioCode",
"cmakeVersion": "3.22.2",
"configured": true,
"generator": "Ninja",
"usesPresets": false,
"compilers": {
"C": "C:/msys64/mingw64/bin/gcc.exe",
"CXX": "C:/msys64/mingw64/bin/g++.exe"
}
}
],
"cpptoolsIntegration": {
"isReady": true,
"hasCodeModel": true,
"activeBuildType": "Debug",
"buildTypesSeen": [
"Debug"
],
"requests": [],
"responses": [],
"partialMatches": [],
"targetCount": 5,
"executablesCount": 1,
"librariesCount": 4,
"targets": [
{
"name": "hello_test",
"type": "EXECUTABLE"
},
{
"name": "gmock",
"type": "STATIC_LIBRARY"
},
{
"name": "gmock_main",
"type": "STATIC_LIBRARY"
},
{
"name": "gtest",
"type": "STATIC_LIBRARY"
},
{
"name": "gtest_main",
"type": "STATIC_LIBRARY"
}
]
},
"settings": [
{
"communicationMode": "automatic",
"useCMakePresets": "auto",
"configureOnOpen": null
}
]
}
```
### Debug Log
```
[main] Building folder: googletestExampleVisualStudioCode
[main] Saving open files before configure/build
[build] Starting build
[driver] Start build all
[proc] Executing command: C:\msys64\mingw64\bin\cmake.EXE --build c:/swdev/googletestExampleVisualStudioCode/build --config Debug --target all --
[build] [5/10 10% :: 1.448] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.obj
[build] [5/10 20% :: 1.498] Building CXX object CMakeFiles/hello_test.dir/hello_test.cc.obj
[build] [5/10 30% :: 1.647] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock_main.dir/src/gmock_main.cc.obj
[build] [5/10 40% :: 2.952] Building CXX object _deps/googletest-build/googlemock/CMakeFiles/gmock.dir/src/gmock-all.cc.obj
[build] [5/10 50% :: 7.825] Building CXX object _deps/googletest-build/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.obj
[build] [6/10 60% :: 9.898] Linking CXX static library lib\libgtest.a
[build] [8/10 70% :: 10.024] Linking CXX static library lib\libgtest_main.a
[build] [9/10 80% :: 10.238] Linking CXX static library lib\libgmock.a
[build] [10/10 90% :: 10.345] Linking CXX static library lib\libgmock_main.a
[build] [10/10 100% :: 13.415] Linking CXX executable hello_test.exe
[build] FAILED: hello_test.exe hello_test[1]_tests.cmake C:/swdev/googletestExampleVisualStudioCode/build/hello_test[1]_tests.cmake
[build] cmd.exe /C "cd . && C:\msys64\mingw64\bin\g++.exe -g CMakeFiles/hello_test.dir/hello_test.cc.obj -o hello_test.exe -Wl,--out-implib,libhello_test.dll.a -Wl,--major-image-version,0,--minor-image-version,0 lib/libgtest_main.a lib/libgtest.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cmd.exe /C "cd /D C:\swdev\googletestExampleVisualStudioCode\build && C:\msys64\mingw64\bin\cmake.exe -D TEST_TARGET=hello_test -D TEST_EXECUTABLE=C:/swdev/googletestExampleVisualStudioCode/build/hello_test.exe -D TEST_EXECUTOR= -D TEST_WORKING_DIR=C:/swdev/googletestExampleVisualStudioCode/build -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX= -D TEST_FILTER= -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=hello_test_TESTS -D CTEST_FILE=C:/swdev/googletestExampleVisualStudioCode/build/hello_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT=5 -D TEST_XML_OUTPUT_DIR= -P C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake""
[build] CMake Error at C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake:83 (message):
[build] Error running test executable.
[build]
[build] Path: 'C:/swdev/googletestExampleVisualStudioCode/build/hello_test.exe'
[build] Result: Exit code 0xc0000139
[build]
[build]
[build]
[build] Output:
[build]
[build]
[build] Call Stack (most recent call first):
[build] C:/msys64/mingw64/share/cmake-3.22/Modules/GoogleTestAddTests.cmake:179 (gtest_discover_tests_impl)
[build]
[build]
[build] ninja: build stopped: subcommand failed.
[cmakefileapi-parser] Read reply folder: c:\swdev\googletestExampleVisualStudioCode\build\.cmake\api\v1\reply
[cmakefileapi-parser] Found index files: ["cache-v2-f00e53a8721923f38460.json","codemodel-v2-fde9bc76c1e4419e2e1e.json","directory-.-Debug-d0094a50bb2071803777.json","directory-_deps.googletest-build-Debug-8b187651187085369010.json","directory-_deps.googletest-build.googlemock-Debug-219f8951a82f9b159b85.json","directory-_deps.googletest-build.googletest-Debug-891949a46de799d7a5cc.json","index-2022-03-23T09-35-31-0095.json","target-gmock-Debug-1b59d74ffd354f86abe8.json","target-gmock_main-Debug-85e69065e441a7293260.json","target-gtest-Debug-f233732b97ff66fa79dc.json","target-gtest_main-Debug-0260e6c264e1ed39d538.json","target-hello_test-Debug-bfa45ce0dbf6bfed5d22.json","toolchains-v1-f8f5ecbc2541b3aeec33.json"]
[build] Build finished with exit code 1
[cache] Reading CMake cache file c:/swdev/googletestExampleVisualStudioCode/build/CMakeCache.txt
[cache] Parsing CMake cache string
[extension] [3876] cmake.buildAll finished (returned 1)
```
Contributor guide
Research direction
Start by reproducing the MSYS2 MinGW64 configuration with the googletest Quickstart example, using the reported CMake Tools diagnostics and build log. Inspect the generated command invoking GoogleTestAddTests.cmake and compare it with the successful MSYS2 terminal build. Done means the example builds and test discovery completes through CMake Tools, or the supported configuration is documented.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp, vscode
- Domain
- build-system, developer-experience, testing-qa
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100