Связывание кроссплатформенной библиотеки CMake - PullRequest
1 голос
/ 14 июля 2020

У меня есть проект, в котором используется много внешних библиотек. Я использую CMake в качестве системы сборки. В настоящее время я добавляю и связываю библиотеки следующим образом:

##### LIBRARIES ###############################################

# Try to find the library the "classic" way
find_library("DEPENDENCY_GLFW" NAMES "glfw" "glfw3")

# Try to find a package for the library
find_package(glfw3 CONFIG)

# Check if the library has been found using the "classic" way
if(DEPENDENCY_GLFW MATCHES "NOTFOUND")
    # If it was not found, check if find_package found it
    if(glfw3_FOUND)
        # find_package found it, add target 
        list(APPEND "DEPENDENCIES" "glfw")
        message(STATUS ">> Found dependency: GLEW")
    else()
        # Has not been found
        message(WARNING ">> Unable to find dependency: GLFW")
    endif()
else()
    # Found it with the "classic" way
    list(APPEND "DEPENDENCIES" "${DEPENDENCY_GLFW}")
    message(STATUS ">> Found dependency: GLFW")
endif()

##### HEADERS #################################################

# Find the header path
find_path(GLFW_INCLUDE_DIRECTORY "GLFW/glfw3.h")
if(GLFW_INCLUDE_DIRECTORY MATCHES "NOTFOUND")
    # Has not been found
    message(WARNING ">> Unable to find dependency headers: GLFW")
else()
    # Has been found, add directory to list
    list(APPEND "DEPENDENCIES_HEADERS" "${GLFW_INCLUDE_DIRECTORY}")
    message(STATUS ">> Found dependency headers: GLFW")
endif()

# ...

target_include_directories("mytarget" PUBLIC "${DEPENDENCIES_HEADERS}")
target_link_libraries("mytarget" PUBLIC "${DEPENDENCIES}")

Хотя это работает, я почти уверен, что есть лучший способ сделать это sh. Код должен быть как можно более кроссплатформенным, что означает, что вы должны иметь возможность связываться с пакетами CMake, предоставляемыми vcpkg (например, Windows) или только библиотеками (например, Linux).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...