AUTOMOC target always out of date with ninja and AUTOMOC_BUILD_DIR set
With the following project the AUTMOC target is always out of date when using the Ninja generator:
cmake_minimum_required(VERSION 3.21)
project(ignored-AUTOGEN_BUILD_DIR)
find_package(Qt6 COMPONENTS Core)
set(CMAKE_AUTOMOC ON)
file(CONFIGURE OUTPUT main.cpp
CONTENT [[
#include <QCoreApplication>
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject(QObject *parent = nullptr) : QObject(parent) {}
};
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
return app.exec();
}
#include <main.moc>
]])
add_executable(myapp ${CMAKE_CURRENT_BINARY_DIR}/main.cpp)
target_link_libraries(myapp PRIVATE Qt6::Core)
set_property(TARGET myapp PROPERTY
AUTOGEN_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/meep")
After building the project, running ninja always prints:
$ ninja
[1/3] Automatic MOC for target myapp
with -d explain
:
$ ninja -d explain
ninja explain: expected depfile '/home/egon/bugreports/cmake/ignored-AUTOGEN_BUILD_DIR/build/CMakeFiles/d/d081e10937072345052f27584e5900f5445f5f67238ee78b70818620a3604340.d' to mention 'meep/timestamp', got 'myapp_autogen/timestamp'
ninja explain: /home/egon/bugreports/cmake/ignored-AUTOGEN_BUILD_DIR/build/meep/mocs_compilation.cpp is dirty
ninja explain: /home/egon/bugreports/cmake/ignored-AUTOGEN_BUILD_DIR/build/meep/mocs_compilation.cpp is dirty
ninja explain: meep/timestamp is dirty
ninja explain: CMakeFiles/myapp_autogen is dirty
ninja explain: meep/timestamp is dirty
ninja explain: meep/mocs_compilation.cpp is dirty
ninja explain: CMakeFiles/myapp.dir/meep/mocs_compilation.cpp.o is dirty
ninja explain: myapp is dirty
[1/3] Automatic MOC for target myapp
AUTOGEN_BUILD_DIR
is not taken into account when calculating the path to the timestamp file.