CMake error for generated file in AUTOMOC target in Ninja Multi-Config
When I add a generated C++ source file to a target, and enable AUTOMOC on this target, CMake errors for missing file in Ninja Multi-Config. When using Ninja instead, no errors emitted.
Minimum example:
CMakeLists.txt
cmake_minimum_required(VERSION 3.17)
project(test)
find_package(Qt5 COMPONENTS Core)
set(GEN_SRC "class_$<CONFIG>.cpp")
add_custom_command(
OUTPUT "${GEN_SRC}"
COMMAND ${CMAKE_COMMAND} -E echo "// cpp src" > "${GEN_SRC}"
VERBATIM
)
add_library(libgen ${GEN_SRC})
set_target_properties(libgen PROPERTIES AUTOMOC ON)
cmake -B build -G "Ninja Multi-Config"
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
CMake Error at CMakeLists.txt:13 (add_library):
Cannot find source file:
class_.cpp
Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm .h
.hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .hip .ispc
-- Generating done
CMake Generate step failed. Build files cannot be regenerated correctly.
When using just Ninja: cmake -B build -G Ninja
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: <path>/automoc_gen_bug/build