未命名包时如何集成 C++ 库

How to integrate C++ library when its package is not named

C++ 和 CMake 新手问题,关于如何将第三方库集成到我自己的代码中。我正在尝试将 Datadog 指标添加到 C++ 应用程序。 officially-endorsed library 没有说明如何集成。我想它应该告诉我如何像这样导入它:

find_package(<PACKAGE> REQUIRED)
add_executable(foobar src/main.cpp)
target_include_directories(foobar PUBLIC ${<PACKAGE_DIRECTORIES>})
target_link_libraries(foobar ${<PACKAGE_LIBRARIES>})

这是我对如何集成第三方库的理解(难道你不希望C++有“pip”吗?)。但是 <> 中的名称在 README 中没有提供。只要我可以使用 CMake,我当然不必这样做。感谢您的帮助!

简单的解决方案是直接获取此库并执行 add_subdirectory。但这需要 cmake >= 3.11.

创建目录 cmake 和文件 cmake/cpp-datadogstatsd.cmake

cpp-datadogstatsd.cmake:

FetchContent_Declare(
        datadogstatsd
        GIT_REPOSITORY https://github.com/BoardiesITSolutions/cpp-datadogstatsd
        # try v1.1.0.5 if this does not work
        GIT_TAG        1.1.0.5
)

FetchContent_GetProperties(datadogstatsd)
if(NOT datadogstatsd_POPULATED)
    message(STATUS "Downloading datadogstatsd...")

    FetchContent_Populate(datadogstatsd)
    add_subdirectory(${datadogstatsd_SOURCE_DIR} ${datadogstatsd_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

然后,包含此 cmake 文件,并将 link DataDogStatsD_static 添加到您的 lib/exe:

include(cmake/cpp-datadogstatsd.cmake)

add_executable(test main.cpp)
target_link_libraries(test DataDogStatsD_static)