On nonstandard extensions and subdirectories

Hello there !!

I have a project that compiles correctly with the following CMakeLists.txt

/CMakeLists.txt

# Set the project name and language
project(myProject LANGUAGES CXX)

# Set the C++20 standard globally
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)

list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS "impl;IMPL")
set_source_files_properties(GLOB_RECURSE **/*.impl LANGUAGE CXX COMPILE_FLAGS "-x c++")
set_source_files_properties(GLOB_RECURSE **/*.IMPL LANGUAGE CXX COMPILE_FLAGS "-x c++")

# Add source files
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.cpp src/*.impl)
cmake_print_variables(SOURCES)

set_source_files_properties(${SOURCES} LANGUAGE CXX COMPILE_FLAGS "-x c++")
message(STATUS "CMAKE_CXX_SOURCE_FILE_EXTENSIONS: ${CMAKE_CXX_SOURCE_FILE_EXTENSIONS}")

# Add executable target
add_executable(myProject-cli ${SOURCES})

→ *.impl are correctly found/listed in GLOB and correctly added to build instructions as C++ files

But when I try to put the GLOB and add_executable(myProject-cli ${SOURCES}) in a subfolder *.impl are correctly found/listed in GLOB but NOT added to build instructions as C++ files, despite CMAKE_CXX_SOURCE_FILE_EXTENSIONS still being valid (including *.impl) …

Would that be a known bug in cmake or an undocumented feature ? Or am-I doing somethig wrong ?

Thanks for any insight :slight_smile:

Lo.

/CMakeLists.txt

# Set the project name and language
project(myProject LANGUAGES CXX)

# Set the C++20 standard globally
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)

list(APPEND CMAKE_CXX_SOURCE_FILE_EXTENSIONS "impl;IMPL")
set_source_files_properties(GLOB_RECURSE **/*.impl LANGUAGE CXX COMPILE_FLAGS "-x c++")

add_subdirectory(_Core)

/_Core/CMakeLists.txt

project(myProject-core LANGUAGES CXX)

# Set C++20 standard
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
# # Add source files
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS src/*.cpp src/*.impl)
cmake_print_variables(SOURCES)

set_source_files_properties(${SOURCES} LANGUAGE CXX COMPILE_FLAGS "-x c++")

# Add static library target
add_library(myProject-core.stat STATIC ${SOURCES})
set_property(TARGET myProject-core-stat PROPERTY LANGUAGE CXX POSITION_INDEPENDENT_CODE 1)
set_target_properties(myProject-core.stat PROPERTIES LINKER_LANGUAGE CXX)
target_include_directories(myProject-core.stat PUBLIC ${CMAKE_SOURCE_DIR}/_Core/include)
export(TARGETS myProject-core.stat FILE myProject-core.stat.cmake)