Merge topic 'file-set-generated-dependency' into release-3.23

d0d09aa29f FILE_SET: Make INTERFACE libraries with HEADER_SETS participate in buildsystem

Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: buildbot <buildbot@kitware.com>
Acked-by: Ben Boeckel <ben.boeckel@kitware.com>
Acked-by: Gabriel Nützi <gnuetzi@gmail.com>
Merge-request: !7173
This commit is contained in:
Brad King
2022-04-15 12:23:50 +00:00
committed by Kitware Robot
6 changed files with 33 additions and 2 deletions
+1
View File
@@ -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,
+4 -2
View File
@@ -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)
@@ -0,0 +1,6 @@
#include <dependency.h>
int main(void)
{
return 0;
}