【发布时间】:2020-01-24 09:20:44
【问题描述】:
我正在尝试为我的项目(Windows 和 Linux)制作一个跨平台的 CMake。
我需要使用外部库(yaml-cpp)。在 Linux 上,我只需要做一个 apt get 并使用 find_package。但在 Windows 上,我需要附加 CMAKE_MODULE_PATH 才能让我的程序找到 yaml-cpp-config.cmake。
所以我首先使用 CMake GUI 3.16 和 mingw32 (mingw32-make install) 安装 yaml-cpp (https://github.com/jbeder/yaml-cpp)。
我已经在一个 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 时遗漏了什么?我应该手动设置路径吗?
【问题讨论】:
-
注意,
yaml-cpp-config.cmake脚本顶部的描述指的是 CMake 变量YAML_CPP_INCLUDE_DIR和YAML_CPP_LIBRARIES,它们通过${XXX}表示法访问。但是您使用符号$ENV{XXX},它适用于环境变量——完全不同的变量集。