Я пытаюсь сделать кроссплатформенный CMake для моего проекта (Windows и Linux). Мне нужно использовать внешние библиотеки (yaml- cpp). На Linux мне просто нужно было получить и использовать find_package
. Но на Windows мне нужно добавить CMAKE_MODULE_PATH
, чтобы моя программа нашла yaml-cpp-config.cmake
.
Итак, я начинаю с установки yaml- cpp (https://github.com/jbeder/yaml-cpp) с CMake GUI 3.16 и mingw32 (mingw32-make install
).
Я попробовал библиотеку в проекте hello world, и она отлично работает.
cmake_minimum_required(VERSION 3.1)
project (yaml_test)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
message (STATUS "Yaml-cpp include = $ENV{YAML_CPP_INCLUDE_DIR}")
message (STATUS "Yaml-cpp library = $ENV{YAML_CPP_LIBRARIES}")
include_directories ($ENV{YAML_CPP_INCLUDE_DIR})
add_executable(yaml_test main.cpp)
target_link_libraries(yaml_test $ENV{YAML_CPP_LIBRARIES})
Но теперь я хочу включить библиотеку в свой проект и использовать find_package
. Но yaml-cpp-config.cmake
выглядит так:
# - Config file for the yaml-cpp package
# It defines the following variables
# YAML_CPP_INCLUDE_DIR - include directory
# YAML_CPP_LIBRARIES - libraries to link against
# Compute paths
get_filename_component(YAML_CPP_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
set(YAML_CPP_INCLUDE_DIR "")
# Our library dependencies (contains definitions for IMPORTED targets)
include("${YAML_CPP_CMAKE_DIR}/yaml-cpp-targets.cmake")
# These are IMPORTED targets created by yaml-cpp-targets.cmake
set(YAML_CPP_LIBRARIES "")
Переменные YAML_CPP_INCLUDE_DIR
и YAML_CPP_LIBRARIES
пусты, и даже если CMake обнаружил yaml-cpp-config.cmake
, он не работает. Так чего же мне не хватает при установке yaml- cpp? Должен ли я установить пути вручную?