首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用visual studio 2019和cmake进行调试中的Yaml_cpp

使用visual studio 2019和cmake进行调试中的Yaml_cpp
EN

Stack Overflow用户
提问于 2021-01-20 04:21:33
回答 1查看 190关注 0票数 1

我正在尝试理解如何在windows和visual studio 2019上使用我的linux项目。因此,我为yaml_cpp编写了一个简单的测试:

代码语言:javascript
运行
复制
#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文件:

代码语言:javascript
运行
复制
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 ..生成项目。该程序在发行版(cmake --build . --config Release)上编译和运行良好。但在调试(cmake --build . --config Debug )中,我有以下错误:

代码语言:javascript
运行
复制
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]

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-26 15:51:50

很奇怪,发布文件被找到了,而调试文件却没有。你应该看看Visual Studio的test属性页面(在"Editeur de liens“下,检查"entrée”中的"Dependances supplémentaire“和"Général”中的"Répertoire de bibliothèque supplémentaire“,然后在"Debug”和"Release“配置之间切换,看看有什么不同)。

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

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

代码语言:javascript
运行
复制
link_directories( "${PARENT_DIR_INSTALL_PREFIX}/YAML_CPP/lib" )

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

代码语言:javascript
运行
复制
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)取代)。但是,如果第一个解决方案不能解决您的问题,那么它可能是一个可接受的解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65798917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档