GENERATED property (post 3.20) still doesn't appear to propagate between directory scopes
The docs say:
Starting with CMake 3.20 the GENERATED source file property can be set and retrieved from any directory scope. It is an all-or-nothing property.
This does not appear to be true (at least not always).
I have the following structure:
<root>
- CMakeLists.txt
- generator
- CMakeLists.txt
- main.cpp
- generated
- my_header.h
- client
- CMakeLists.txt
- main.cpp
<root>/CMakeLists.txt
cmake_minimum_required(VERSION 3.20)
project(test)
cmake_path(SET my-gen-file NORMALIZE "${CMAKE_SOURCE_DIR}/generated/my_header.h")
add_subdirectory(generator)
add_subdirectory(client)
<root>/generator/CMakeLists.txt
add_executable(my-file-generator main.cpp)
add_custom_command(
OUTPUT ${my-gen-file}
COMMAND "$<TARGET_FILE:my-file-generator>" ${my-gen-file}
DEPENDS my-file-generator
)
add_custom_target(generate-my-file DEPENDS "${my-gen-file}")
get_source_file_property(is-gen-from-generator "${my-gen-file}" GENERATED)
message(INFO "!!!!! Generated from generator = ${is-gen-from-generator}")
<root>/generator/main.cpp
#include <fstream>
#include <string>
int main(int argc, char**argv){
std::string path = argv[1];
std::ofstream file(path);
file << "#pragma once\n";
return 0;
}
<root>/generated/my_header.h
#pragma once
<root>/client/CMakeLists.txt
add_executable(client main.cpp)
add_dependencies(client generate-my-file)
target_include_directories(client PRIVATE "${CMAKE_SOURCE_DIR}")
get_source_file_property(is-gen-from-client "${my-gen-file}" GENERATED)
message(INFO "!!!!! Generated from client = ${is-gen-from-client}")
<root>/client/main.cpp
#include <iostream>
#include "generated/my_header.h"
int main(){
std::cout << "hello\n";
return 0;
}
Using Ninja, I get the following output when configuring:
1> [CMake] INFO!!!!! Generated from generator = 1
1> [CMake] INFO!!!!! Generated from client = NOTFOUND