@@ -35,7 +35,7 @@ include(TribitsSetAndIncDirs)
35
35
# [HEADERS <h0> <h1> ...]
36
36
# [HEADERS_INSTALL_SUBDIR <headerssubdir>]
37
37
# [NOINSTALLHEADERS <nih0> <hih1> ...]
38
- # [SOURCES <src0> <src1> ...]
38
+ # [SOURCES <src0> <src1> ...|HEADERONLY ]
39
39
# [DEPLIBS <deplib0> <deplib1> ...]
40
40
# [IMPORTEDLIBS <ideplib0> <ideplib1> ...]
41
41
# [STATIC|SHARED]
@@ -150,6 +150,12 @@ include(TribitsSetAndIncDirs)
150
150
# if, for example, ``-fPIC`` is specified). So be careful to use
151
151
# ``STATIC`` in all downstream libraries!
152
152
#
153
+ # ``HEADERONLY``
154
+ #
155
+ # If passed in, then the ``<libTargetName>`` library target will be
156
+ # declared ``INTERFACE`` and the ``SOURCES`` argument must be empty. This
157
+ # is used to create a header-only library.
158
+ #
153
159
# ``TESTONLY``
154
160
#
155
161
# If passed in, then ``<libTargetName>`` will **not** be added to
@@ -319,7 +325,7 @@ function(tribits_add_library LIBRARY_NAME_IN)
319
325
#prefix
320
326
PARSE
321
327
#Options
322
- "STATIC;SHARED;TESTONLY;NO_INSTALL_LIB_OR_HEADERS;CUDALIBRARY"
328
+ "STATIC;SHARED;HEADERONLY; TESTONLY;NO_INSTALL_LIB_OR_HEADERS;CUDALIBRARY"
323
329
#one_value_keywords
324
330
""
325
331
#mulit_value_keywords
@@ -369,27 +375,39 @@ function(tribits_add_library LIBRARY_NAME_IN)
369
375
add_definitions (${PARSE_DEFINES} )
370
376
endif ()
371
377
378
+ if (PARSE_HEADERONLY)
379
+ set (tribitsAddLibraryIncludeDirsMode "INTERFACE" )
380
+ else ()
381
+ set (tribitsAddLibraryIncludeDirsMode "PUBLIC" )
382
+ endif ()
383
+
384
+ set (STATIC_KEYWORD "" )
385
+ set (SHARED_KEYWORD "" )
386
+
372
387
if (PARSE_STATIC)
373
388
set (STATIC_KEYWORD "STATIC" )
374
- else ()
375
- set (STATIC_KEYWORD "" )
376
389
endif ()
377
390
378
391
if (PARSE_SHARED)
379
392
set (SHARED_KEYWORD "SHARED" )
380
- else ()
381
- set (SHARED_KEYWORD "" )
382
393
endif ()
383
394
384
395
if (NOT PARSE_CUDALIBRARY)
385
- add_library (
386
- ${LIBRARY_NAME}
387
- ${STATIC_KEYWORD}
388
- ${SHARED_KEYWORD}
389
- ${PARSE_HEADERS}
390
- ${PARSE_NOINSTALLHEADERS}
391
- ${PARSE_SOURCES}
392
- )
396
+ if (PARSE_HEADERONLY)
397
+ add_library (
398
+ ${LIBRARY_NAME}
399
+ INTERFACE
400
+ )
401
+ else ()
402
+ add_library (
403
+ ${LIBRARY_NAME}
404
+ ${STATIC_KEYWORD}
405
+ ${SHARED_KEYWORD}
406
+ ${PARSE_HEADERS}
407
+ ${PARSE_NOINSTALLHEADERS}
408
+ ${PARSE_SOURCES}
409
+ )
410
+ endif ()
393
411
else ()
394
412
cuda_add_library(
395
413
${LIBRARY_NAME}
@@ -433,30 +451,35 @@ function(tribits_add_library LIBRARY_NAME_IN)
433
451
434
452
# DEPLIBS
435
453
foreach (depLib ${PARSE_DEPLIBS} )
436
- target_link_libraries (${LIBRARY_NAME} PUBLIC "${LIBRARY_NAME_PREFIX}${depLib} " )
454
+ target_link_libraries (${LIBRARY_NAME}
455
+ ${tribitsAddLibraryIncludeDirsMode} "${LIBRARY_NAME_PREFIX}${depLib} " )
437
456
endforeach ()
438
457
# ${PACKAGE_NAME}_LIBRARIES
439
- target_link_libraries (${LIBRARY_NAME} PUBLIC ${${PACKAGE_NAME} _LIBRARIES})
458
+ target_link_libraries (${LIBRARY_NAME}
459
+ ${tribitsAddLibraryIncludeDirsMode} ${${PACKAGE_NAME} _LIBRARIES})
440
460
# ${PACKAGE_NAME}_LIB_ENABLED_DEPENDENCIES
441
461
foreach (depPkg IN LISTS ${PACKAGE_NAME} _LIB_ENABLED_DEPENDENCIES)
442
- target_link_libraries (${LIBRARY_NAME} PUBLIC ${depPkg} ::all_libs)
462
+ target_link_libraries (${LIBRARY_NAME}
463
+ ${tribitsAddLibraryIncludeDirsMode} ${depPkg} ::all_libs)
443
464
endforeach ()
444
465
# ${PACKAGE_NAME}_TEST_ENABLED_DEPENDENCIES (TESTONLY lib)
445
466
if (PARSE_TESTONLY)
446
467
foreach (depPkg IN LISTS ${PACKAGE_NAME} _TEST_ENABLED_DEPENDENCIES)
447
- target_link_libraries (${LIBRARY_NAME} PUBLIC ${depPkg} ::all_libs)
468
+ target_link_libraries (${LIBRARY_NAME}
469
+ ${tribitsAddLibraryIncludeDirsMode} ${depPkg} ::all_libs)
448
470
endforeach ()
449
471
endif ()
450
472
# IMPORTEDLIBS
451
473
foreach (importedLib ${PARSE_IMPORTEDLIBS} )
452
- target_link_libraries (${LIBRARY_NAME} PUBLIC "${importedLib} " )
474
+ target_link_libraries (${LIBRARY_NAME}
475
+ ${tribitsAddLibraryIncludeDirsMode} "${importedLib} " )
453
476
endforeach ()
454
477
455
478
# ToDo: #63: Above, allow for other link visibilities other than 'PUBLIC'!
456
479
457
480
if (${PROJECT_NAME} _CXX_STANDARD_FEATURE)
458
- target_compile_features (${LIBRARY_NAME} PUBLIC
459
- "${${PROJECT_NAME} _CXX_STANDARD_FEATURE}" )
481
+ target_compile_features (${LIBRARY_NAME}
482
+ ${tribitsAddLibraryIncludeDirsMode} "${${PROJECT_NAME} _CXX_STANDARD_FEATURE}" )
460
483
endif ()
461
484
462
485
# Add to the install target
@@ -510,7 +533,8 @@ function(tribits_add_library LIBRARY_NAME_IN)
510
533
foreach (includeDir IN LISTS INCLUDE_DIRS_CURRENT)
511
534
list (APPEND buildInterfaceIncludeDirs "$<BUILD_INTERFACE:${includeDir} >" )
512
535
endforeach ()
513
- target_include_directories ( ${LIBRARY_NAME} PUBLIC ${buildInterfaceIncludeDirs} )
536
+ target_include_directories ( ${LIBRARY_NAME}
537
+ ${tribitsAddLibraryIncludeDirsMode} ${buildInterfaceIncludeDirs} )
514
538
515
539
# Add ALIAS library <PackageName>::<libname>
516
540
add_library (${PACKAGE_NAME} ::${LIBRARY_NAME} ALIAS ${LIBRARY_NAME} )
0 commit comments