使用 Visual Studio 2019 和 cmake 调试 Yaml_cpp

Posted

技术标签:

【中文标题】使用 Visual Studio 2019 和 cmake 调试 Yaml_cpp【英文标题】:Yaml_cpp in debug with visual studio 2019 and cmake 【发布时间】:2021-01-19 20:21:33 【问题描述】:

我正在尝试了解如何通过 Visual Studio 2019 在 Windows 上使用我的 linux 项目。所以我为 yaml_cpp 编写了一个简单的测试:

#include "yaml-cpp/yaml.h"

#include <iostream>
#include <string>
#include <cassert>

int main() 

    try 
    
        assert(1 == 2);
        YAML::Node config = YAML::LoadFile("config.yaml");
        std::cerr << config["hello"].as<std::string>() << std::endl;

        
    
    catch (std::exception& e)
    
        std::cerr << "Caught " << e.what() << std::endl;
        std::cerr << "Type " << typeid(e).name() << std::endl;
    ;

    return 0;

我写了一个基本的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.1)

project (test)

set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE) 

get_filename_component(PARENT_DIR_INSTALL_PREFIX $CMAKE_INSTALL_PREFIX DIRECTORY)

find_package(yaml-cpp REQUIRED PATHS "$PARENT_DIR_INSTALL_PREFIX/YAML_CPP/share/cmake/yaml-cpp")

add_executable(test
  main.cpp)
  
  target_include_directories(test
  PUBLIC
  $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/include >
  )

target_link_libraries(test debug yaml-cppd optimized yaml-cpp)

我使用cmake -G "Visual Studio 16 2019" -Ax64 .. 生成项目。该程序在 Release (cmake --build . --config Release) 上编译并运行良好。但是在调试(cmake --build . --config Debug,我有以下错误:

LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'yaml-cppd.lib' [C:\Users\kafka\dev\C++\test\yaml_for_vs\bui
ld\test.vcxproj]

“Impossible d'ouvrir le fichier”表示无法打开文件“yaml-cppd.lib”。我已经在发布和调试中编译了 yaml-cpp,并且文件“yaml-cppd.lib”存在于“C:\Program Files (x86)\YAML_CPP\lib”中。我错过了什么?

【问题讨论】:

能否在get_filename_componentfind_package 行之间添加message( "PARENT_DIR_INSTALL_PREFIX=$PARENT_DIR_INSTALL_PREFIX" ) 并发布运行cmake 时显示的内容? PARENT_DIR_INSTALL_PREFIX=C:/程序文件 (x86)。 yaml 正在安装在 C:\Program Files (x86)\YAML_CPP 中。在 bin 文件夹中,我有 yaml-cpp.dll 和 yaml-cppd.lib。在 lib 文件夹中,我有 yaml-cpp.dll 和 yaml-cppd.lib。 你试过target_link_libraries(test debug $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/yaml-cppd.lib optimized $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/yaml-cpp.lib) 吗? 【参考方案1】:

在没有调试的情况下找到发布文件肯定很奇怪。您应该查看 Visual Studio 的 test 属性页面(在“Editeur de Liens”下,检查“entrée”中的“Dependances supplémentaires”和“Général”中的“Répertoire de bibliothèques supplémentaires”,然后在“Debug”和“Release”之间切换" config 看看有什么不同)。

无论如何,这里有两种解决方法可以解决您的问题:

明确指定应从何处获取库:

link_directories( "$PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib" )

或者,明确指定要链接的 .lib 文件:

target_link_libraries(test debug $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/yaml-cppd.lib optimized $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/yaml-cpp.lib)

最后一个的缺点是不能跨平台(在 Linux 下,它应该替换为 target_link_libraries(test debug $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/libyaml-cppd.so optimized $PARENT_DIR_INSTALL_PREFIX/YAML_CPP/lib/libyaml-cpp.so)。但如果第一个不能解决您的问题,它可能是一个可以接受的解决方法。

【讨论】:

好的,链接目录有效。我使用 target_link_directories 命令与我的项目保持一致。谢谢。

以上是关于使用 Visual Studio 2019 和 cmake 调试 Yaml_cpp的主要内容,如果未能解决你的问题,请参考以下文章

visual studio2019怎么运行c语言程序

我的全栈之路-C语言基础之Visual Studio 2019使用技巧

怎样visual studio2019

Visual Studio 2019 C++ dll Excel VBA 插件问题

visual studio2019的安装以及使用

将数据从 C 缓冲区传输到 Python,以便在 Visual Studio 2019 中使用 Matplotlib 进行绘图