mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-01 19:30:13 -06:00
FILE_SET: Make INTERFACE libraries with HEADER_SETS participate in buildsystem
If an INTERFACE library has HEADER_SETS, and its header sets contain files generated by a custom command, the library needs to participate in the buildsystem so that the files will be generated. Fixes: #23422
This commit is contained in:
@@ -151,6 +151,7 @@ itself and is not included as a target in the generated buildsystem.
|
||||
``PUBLIC`` keywords.
|
||||
|
||||
If an interface library has source files (i.e. the :prop_tgt:`SOURCES`
|
||||
target property is set), or header sets (i.e. the :prop_tgt:`HEADER_SETS`
|
||||
target property is set), it will appear in the generated buildsystem
|
||||
as a build target much like a target defined by the
|
||||
:command:`add_custom_target` command. It does not compile any sources,
|
||||
|
||||
@@ -1208,8 +1208,10 @@ bool cmGeneratorTarget::IsInBuildSystem() const
|
||||
case cmStateEnums::GLOBAL_TARGET:
|
||||
return true;
|
||||
case cmStateEnums::INTERFACE_LIBRARY:
|
||||
// An INTERFACE library is in the build system if it has SOURCES.
|
||||
if (!this->SourceEntries.empty()) {
|
||||
// An INTERFACE library is in the build system if it has SOURCES or
|
||||
// HEADER_SETS.
|
||||
if (!this->SourceEntries.empty() ||
|
||||
!this->Target->GetHeaderSetsEntries().empty()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
enable_language(C)
|
||||
|
||||
add_library(lib INTERFACE)
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/dependency.h
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FileSetGeneratedDependency.h.in ${CMAKE_CURRENT_BINARY_DIR}/dependency.h
|
||||
VERBATIM
|
||||
)
|
||||
target_sources(lib PUBLIC FILE_SET HEADERS BASE_DIRS ${CMAKE_CURRENT_BINARY_DIR} FILES ${CMAKE_CURRENT_BINARY_DIR}/dependency.h)
|
||||
|
||||
add_executable(exe dependency.c)
|
||||
target_link_libraries(exe PRIVATE lib)
|
||||
@@ -0,0 +1 @@
|
||||
/* empty */
|
||||
@@ -43,6 +43,15 @@ if(APPLE)
|
||||
run_cmake(FileSetFramework)
|
||||
endif()
|
||||
|
||||
set(RunCMake_TEST_NO_CLEAN 1)
|
||||
set(RunCMake_TEST_BINARY_DIR "${RunCMake_BINARY_DIR}/FileSetGeneratedDependency-build")
|
||||
file(REMOVE_RECURSE "${RunCMake_TEST_BINARY_DIR}")
|
||||
file(MAKE_DIRECTORY "${RunCMake_TEST_BINARY_DIR}")
|
||||
run_cmake(FileSetGeneratedDependency)
|
||||
run_cmake_command(FileSetGeneratedDependency-build ${CMAKE_COMMAND} --build . --config Debug)
|
||||
unset(RunCMake_TEST_BINARY_DIR)
|
||||
unset(RunCMake_TEST_NO_CLEAN)
|
||||
|
||||
set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0115=NEW)
|
||||
run_cmake(FileSetFileNoExist)
|
||||
unset(RunCMake_TEST_OPTIONS)
|
||||
|
||||
6
Tests/RunCMake/target_sources/dependency.c
Normal file
6
Tests/RunCMake/target_sources/dependency.c
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <dependency.h>
|
||||
|
||||
int main(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user