Skip to content

Commit fa8bece

Browse files
committed
Use CMake's FILE_SET to replace target_include_directories for better convenience
1 parent ac27beb commit fa8bece

File tree

1 file changed

+51
-24
lines changed

1 file changed

+51
-24
lines changed

CMakeLists.txt

Lines changed: 51 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,23 @@ set(stdexec_export_targets)
151151
# Define the main library
152152
add_library(stdexec INTERFACE)
153153

154+
file(GLOB_RECURSE exec_headers CONFIGURE_DEPENDS include/exec/*.hpp)
155+
file(GLOB_RECURSE stdexec_headers CONFIGURE_DEPENDS include/stdexec/*.hpp)
156+
target_sources(stdexec
157+
PUBLIC
158+
FILE_SET headers
159+
TYPE HEADERS
160+
BASE_DIRS include
161+
FILES
162+
${exec_headers}
163+
${stdexec_headers}
164+
# stdexec_version_config.hpp is generated by raipds' script
165+
FILE_SET version_config
166+
TYPE HEADERS
167+
BASE_DIRS ${CMAKE_BINARY_DIR}/include
168+
FILES
169+
${CMAKE_BINARY_DIR}/include/stdexec_version_config.hpp
170+
)
154171
list(APPEND stdexec_export_targets stdexec)
155172

156173
# Set library version
@@ -160,10 +177,6 @@ set_target_properties(stdexec PROPERTIES
160177

161178
# Declare the public include directories
162179
include(GNUInstallDirs)
163-
target_include_directories(stdexec INTERFACE
164-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
165-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
166-
)
167180

168181
target_link_libraries(stdexec INTERFACE Threads::Threads)
169182

@@ -269,9 +282,15 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC")
269282
endif()
270283

271284
if(STDEXEC_ENABLE_CUDA)
272-
273-
file(GLOB_RECURSE nvexec_sources include/nvexec/*.cuh)
274-
add_library(nvexec INTERFACE ${nvexec_sources})
285+
file(GLOB_RECURSE nvexec_headers CONFIGURE_DEPENDS include/nvexec/*.cuh)
286+
add_library(nvexec INTERFACE)
287+
target_sources(nvexec
288+
PUBLIC
289+
FILE_SET headers
290+
TYPE HEADERS
291+
BASE_DIRS include
292+
FILES ${nvexec_headers}
293+
)
275294
list(APPEND stdexec_export_targets nvexec)
276295
add_library(STDEXEC::nvexec ALIAS nvexec)
277296

@@ -283,6 +302,10 @@ if(STDEXEC_ENABLE_CUDA)
283302
target_link_options(nvexec INTERFACE
284303
$<$<AND:$<CXX_COMPILER_ID:NVHPC>,$<COMPILE_LANGUAGE:CXX>>:-stdpar -gpu=cc${CMAKE_CUDA_ARCHITECTURES}>)
285304

305+
install(TARGETS nvexec
306+
EXPORT stdexec-exports
307+
FILE_SET headers)
308+
286309
if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "NVHPC"))
287310
include(rapids-cuda)
288311
# Needs to run before `enable_language(CUDA)`
@@ -330,8 +353,19 @@ if (STDEXEC_ENABLE_TBB)
330353
INSTALL_EXPORT_SET stdexec-exports
331354
)
332355

333-
file(GLOB_RECURSE tbbpool_sources include/execpools/tbb/*.hpp)
334-
add_library(tbbpool INTERFACE ${tbbpool_sources})
356+
# CONFIGURE_DEPENDS ensures that CMake reconfigures when a relevant hpp file is
357+
# added or removed.
358+
file(GLOB_RECURSE tbbpool_headers CONFIGURE_DEPENDS include/execpools/tbb/*.hpp)
359+
add_library(tbbpool INTERFACE)
360+
list(APPEND stdexec_export_targets tbbpool)
361+
add_library(STDEXEC::tbbpool ALIAS tbbpool)
362+
target_sources(tbbpool
363+
PUBLIC
364+
FILE_SET headers
365+
TYPE HEADERS
366+
BASE_DIRS include
367+
FILES ${tbbpool_headers}
368+
)
335369
list(APPEND stdexec_export_targets tbbpool)
336370
add_library(STDEXEC::tbbpool ALIAS tbbpool)
337371

@@ -340,6 +374,10 @@ if (STDEXEC_ENABLE_TBB)
340374
STDEXEC::stdexec
341375
TBB::tbb
342376
)
377+
378+
install(TARGETS tbbpool
379+
EXPORT stdexec-exports
380+
FILE_SET headers)
343381
endif()
344382

345383
option(STDEXEC_ENABLE_TASKFLOW "Enable TaskFlow targets" OFF)
@@ -435,10 +473,6 @@ endif()
435473

436474
set(SYSTEM_CONTEXT_SOURCES src/system_context/system_context.cpp)
437475
add_library(system_context STATIC ${SYSTEM_CONTEXT_SOURCES})
438-
target_include_directories(system_context PRIVATE
439-
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/>
440-
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
441-
)
442476
target_compile_features(system_context PUBLIC cxx_std_20)
443477
set_target_properties(system_context PROPERTIES
444478
CXX_STANDARD 20
@@ -448,7 +482,7 @@ target_compile_options(system_context PUBLIC
448482
$<$<COMPILE_LANG_AND_ID:CXX,MSVC>:/Zc:__cplusplus /Zc:preprocessor>
449483
)
450484
add_library(STDEXEC::system_context ALIAS system_context)
451-
485+
target_link_libraries(system_context PUBLIC stdexec)
452486

453487

454488
if(CMAKE_CROSSCOMPILING)
@@ -499,16 +533,9 @@ endif()
499533
include(CPack)
500534

501535
install(TARGETS stdexec system_context
502-
DESTINATION ${CMAKE_INSTALL_LIBDIR}
503-
EXPORT stdexec-exports)
504-
505-
install(
506-
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
507-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
508-
509-
install(
510-
FILES ${CMAKE_CURRENT_BINARY_DIR}/include/stdexec_version_config.hpp
511-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
536+
EXPORT stdexec-exports
537+
FILE_SET headers
538+
FILE_SET version_config)
512539

513540
##############################################################################
514541
# Install exports ------------------------------------------------------------

0 commit comments

Comments
 (0)