CMake Error: -E cmake_ninja_dyndep failed to parse CMakeFiles/main.dir/main.cpp.o.ddi: expected 1 source entry
Repro steps:
- Versions
$ cmake --version
cmake version 3.28.20231118-gee3e050
CMake suite maintained and supported by Kitware (kitware.com/cmake).
$ninja --version
1.11.1
$ clang++ --version
Homebrew clang version 17.0.4
Target: arm64-apple-darwin23.1.0
Thread model: posix
InstalledDir: /opt/homebrew/opt/llvm/bin
- CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(demo CXX)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
if(MESSING)
add_compile_options(-fsanitize=nosupport)
add_link_options(-fsanitize=nosupport)
endif()
add_executable(main main.cpp) # main.cpp's content is "int main() {}"
- Configure and build without defined
MESSING
. This succeeds as expected.
$ rm -rf build
$ CXX=`which clang++` cmake -GNinja -S . -B build && cmake --build build
-- The CXX compiler identification is Clang 17.0.4
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /opt/homebrew/opt/llvm/bin/clang++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.2s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/cmake-test/build
[4/4] Linking CXX executable main
- Reconfigure and build with defined
MESSING
. This fails as expected.
$ cmake -DMESSING=1 build && cmake --build build
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/cmake-test/build
[1/4] Scanning /tmp/cmake-test/main.cpp for CXX dependencies
FAILED: CMakeFiles/main.dir/main.cpp.o.ddi
"/opt/homebrew/Cellar/llvm/17.0.4/bin/clang-scan-deps" -format=p1689 -- /opt/homebrew/opt/llvm/bin/clang++ -fsanitize=nosupport -std=c++20 -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.0.sdk -x c++ /tmp/cmake-test/main.cpp -c -o CMakeFiles/main.dir/main.cpp.o -MT CMakeFiles/main.dir/main.cpp.o.ddi -MD -MF CMakeFiles/main.dir/main.cpp.o.ddi.d > CMakeFiles/main.dir/main.cpp.o.ddi
error: unsupported argument 'nosupport' to option '-fsanitize='
Error while scanning dependencies for /tmp/cmake-test/main.cpp:
error: unsupported argument 'nosupport' to option '-fsanitize='
ninja: build stopped: subcommand failed.
- Reconfigure and build without defined
MESSING
. This fails as UN-expected.
$ cmake -DMESSING=0 build && cmake --build build
-- Configuring done (0.0s)
-- Generating done (0.0s)
-- Build files have been written to: /tmp/cmake-test/build
[1/1] Generating CXX dyndep file CMakeFiles/main.dir/CXX.dd
FAILED: CMakeFiles/main.dir/CXX.dd /tmp/cmake-test/build/CMakeFiles/main.dir/CXXModules.json CMakeFiles/main.dir/main.cpp.o.modmap
/opt/homebrew/Cellar/cmake/HEAD-ee3e050/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/main.dir/CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/main.dir/CXX.dd @CMakeFiles/main.dir/CXX.dd.rsp
CMake Error: -E cmake_ninja_dyndep failed to parse CMakeFiles/main.dir/main.cpp.o.ddi: expected 1 source entry
CMake Error: -E cmake_ninja_dyndep failed to parse ddi file CMakeFiles/main.dir/main.cpp.o.ddi
ninja: build stopped: subcommand failed.
$ cat build/CMakeFiles/main.dir/main.cpp.o.ddi
{
"revision": 0,
"rules": [],
"version": 1
}
- After
cmake --build build --target clean
, it succeeds as expected.
$ cmake --build build --target clean && cmake --build build
[1/1] Cleaning all built files...
Cleaning... 8 files.
[4/4] Linking CXX executable main
$ cat build/CMakeFiles/main.dir/main.cpp.o.ddi
{
"revision": 0,
"rules": [
{
"primary-output": "CMakeFiles/main.dir/main.cpp.o"
}
],
"version": 1
}
Edited: fixed wrong copied command output.
Edited by Namniav W