Explicit and smart CMake target (#2935)

* Explicit and smart CMake target

* Only expose explicit CMake targets
This commit is contained in:
Antoine Prouvost 2023-10-31 12:07:03 +01:00 committed by GitHub
parent 33649d1005
commit 80e3475e06
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 33 additions and 45 deletions

View File

@ -602,6 +602,7 @@ macro(libmamba_create_target target_name linkage output_name)
endif ()
list(APPEND libmamba_targets ${target_name})
add_library(mamba::${target_name} ALIAS ${target_name})
endmacro()
@ -609,7 +610,7 @@ set(libmamba_targets "")
if (BUILD_SHARED)
message(STATUS "Adding shared libmamba target")
libmamba_create_target(libmamba SHARED libmamba)
libmamba_create_target(libmamba-dyn SHARED libmamba)
endif ()
if (BUILD_STATIC)
@ -622,9 +623,15 @@ if (BUILD_STATIC)
else ()
libmamba_create_target(libmamba-static STATIC libmamba)
endif ()
endif ()
endif()
if (NOT (BUILD_SHARED OR BUILD_STATIC))
if(BUILD_SHARED_LIBS AND BUILD_SHARED)
add_library(mamba::libmamba ALIAS libmamba-dyn)
elseif(BUILD_STATIC)
add_library(mamba::libmamba ALIAS libmamba-static)
elseif(BUILD_SHARED)
add_library(mamba::libmamba ALIAS libmamba-dyn)
else()
message(FATAL_ERROR "Select at least a build variant for libmamba")
endif ()
@ -654,8 +661,11 @@ install(DIRECTORY "${LIBMAMBA_INCLUDE_DIR}/"
PATTERN "*.h")
# Makes the project importable from the build directory
export(EXPORT ${PROJECT_NAME}-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake")
export(
EXPORT ${PROJECT_NAME}-targets
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
NAMESPACE mamba::
)
# Configure 'mambaConfig.cmake' for a build tree
set(MAMBA_CONFIG_CODE "####### Expanded from \@MAMBA_CONFIG_CODE\@ #######\n")

View File

@ -34,13 +34,13 @@ find_dependency(yaml-cpp)
if(NOT (TARGET libmamba OR TARGET libmamba-static))
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
if (TARGET libmamba-static)
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba-static INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(@PROJECT_NAME@_STATIC_LIBRARY libmamba-static LOCATION)
endif ()
if (TARGET libmamba)
if (TARGET mamba::libmamba-dyn)
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(@PROJECT_NAME@_LIBRARY libmamba LOCATION)
endif ()
endif()
if (TARGET mamba::libmamba-static)
get_target_property(@PROJECT_NAME@_INCLUDE_DIR libmamba-static INTERFACE_INCLUDE_DIRECTORIES)
get_target_property(@PROJECT_NAME@_STATIC_LIBRARY libmamba-static LOCATION)
endif()
endif()

View File

@ -1,14 +1,8 @@
cmake_minimum_required(VERSION 3.16)
if (BUILD_SHARED)
set(libmamba_target "libmamba")
else ()
set(libmamba_target "libmamba-static")
endif()
add_executable(testing_libmamba_lock libmamba_lock/lock.cpp)
target_link_libraries(testing_libmamba_lock PUBLIC ${libmamba_target})
target_link_libraries(testing_libmamba_lock PUBLIC mamba::libmamba)
target_compile_features(testing_libmamba_lock PUBLIC cxx_std_17)
@ -97,7 +91,7 @@ find_package(Threads REQUIRED)
target_link_libraries(
test_libmamba
PUBLIC
${libmamba_target}
mamba::libmamba
reproc
reproc++
PRIVATE

View File

@ -11,9 +11,9 @@ cmake_policy(SET CMP0057 NEW)
project(libmambapy)
if(NOT TARGET libmamba)
if(NOT TARGET mamba::libmamba)
find_package(libmamba REQUIRED)
endif ()
endif()
find_package(Python COMPONENTS Interpreter Development)
find_package(pybind11 REQUIRED)
@ -25,7 +25,7 @@ pybind11_add_module(bindings
mamba_target_add_compile_warnings(bindings WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
target_link_libraries(bindings PUBLIC pybind11::pybind11 libmamba)
target_link_libraries(bindings PRIVATE pybind11::pybind11 mamba::libmamba)
set_property(TARGET bindings PROPERTY CXX_STANDARD 17)
install(TARGETS bindings

View File

@ -10,18 +10,6 @@ cmake_policy(SET CMP0077 NEW) # Introduced in cmake 3.13
project(mamba-package)
# Build options
# =============
if (BUILD_STATIC AND NOT BUILD_SHARED)
set(MAMBA_PACKAGE_LINKAGE "STATIC" CACHE STRING "mamba-package linkage against libraries")
else ()
set(MAMBA_PACKAGE_LINKAGE "DYNAMIC" CACHE STRING "mamba-package linkage against libraries")
endif ()
string(TOUPPER "${MAMBA_PACKAGE_LINKAGE}" linkage_upper)
message(STATUS "'mamba-package' linkage: ${MAMBA_PACKAGE_LINKAGE}")
# Source files
# ============
@ -37,7 +25,7 @@ set(MAMBA_PACKAGE_HEADERS
# Dependencies
# ============
if(NOT (TARGET libmamba OR TARGET libmamba-static))
if(NOT TARGET mamba::libmamba)
find_package(libmamba REQUIRED)
endif ()
@ -47,12 +35,8 @@ endif ()
add_executable(mamba-package ${MAMBA_PACKAGE_SRCS} ${MAMBA_PACKAGE_HEADERS})
mamba_target_add_compile_warnings(mamba-package WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
if (${MAMBA_PACKAGE_LINKAGE} STREQUAL "STATIC")
target_link_libraries(mamba-package PRIVATE libmamba-static)
else ()
target_link_libraries(mamba-package PRIVATE libmamba)
endif ()
target_link_libraries(mamba-package PRIVATE mamba::libmamba)
set_property(TARGET mamba-package PROPERTY CXX_STANDARD 17)
set_target_properties(mamba-package PROPERTIES CXX_STANDARD 17)
install(TARGETS mamba-package)

View File

@ -65,7 +65,7 @@ add_executable(micromamba ${MICROMAMBA_SRCS} ${MICROMAMBA_HEADERS})
mamba_target_add_compile_warnings(micromamba WARNING_AS_ERROR ${MAMBA_WARNING_AS_ERROR})
mamba_target_set_lto(micromamba MODE ${MAMBA_LTO})
if(NOT (TARGET libmamba OR TARGET libmamba-static))
if(NOT (TARGET mamba::libmamba-dyn OR TARGET mamba::libmamba-static))
find_package(libmamba REQUIRED)
endif ()
@ -73,9 +73,9 @@ string(TOUPPER "${MICROMAMBA_LINKAGE}" linkage_upper)
message(STATUS "Micromamba linkage: ${MICROMAMBA_LINKAGE}")
if (${MICROMAMBA_LINKAGE} STREQUAL "STATIC")
set(libmamba_target "libmamba-static")
set(libmamba_target mamba::libmamba-static)
else ()
set(libmamba_target "libmamba")
set(libmamba_target mamba::libmamba-dyn)
endif ()
find_package(Threads REQUIRED)