2017-01-30 70 views
1

我想在cmake和gcc(使用Ubuntu)的設置中加載YAML數據到C++,但是我得到一個我無法解決的錯誤。yaml-cpp未定義的參考與CMake

到目前爲止,我已經做了以下內容:

克隆yaml-cpp回購,創建build,使用cmake ..make建庫和文件複製從Downloads/yaml-cpp/build/include/yaml-cpp/myproject/include/yaml-cpp/

而且,我有重現錯誤如下最低工作示例:

CMakeLists.txt

cmake_minimum_required(VERSION 3.6) 
project(YAML_TEST) 

set(CMAKE_CXX_STANDARD 11) 
include_directories("include") 

add_library(YAML_LIB include/yaml-cpp/yaml.h) 
set_target_properties(YAML_LIB PROPERTIES LINKER_LANGUAGE CXX) 

set(SOURCE_FILES main.cpp) 
add_executable(YAML_TEST ${SOURCE_FILES}) 
target_link_libraries(YAML_TEST YAML_LIB) 

main.cpp

#include <iostream> 
#include <string.h> 
#include "include/yaml-cpp/yaml.h" 

int main() { 
    YAML::Node config = YAML::LoadFile("test.yaml"); 
    std::cout << "tag: " << config["tag"].as<std::string>() << "\n"; 

    return 0; 
} 

而且我也有一個小的YAML文件(test.yaml),它包含:

tag: "This is a text" 
category: 
    anothertag: 123 

但是,如果我嘗試編譯項目時,我得到的錯誤

/home/david/Desktop/myproject/main.cpp:6: undefined reference to `YAML::LoadFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' ... 

我猜的項目不正確地找到YAML-CPP庫。但我無法解決這個問題。

回答

1

add_library(YAML_LIB include/yaml-cpp/yaml.h) 

會盡量只使用頭文件庫,它不會有任何的組成YAML-CPP的符號。您需要構建庫並進行安裝。

+0

這指出我在正確的方向。我運行'make'而不是'make install'。 – David

+0

對於那些遇到同樣問題的人,在'make install'之後,你還必須使用'target_link_libraries(YAML_TEST yaml-cpp)'鏈接cmake中的yaml-cpp' – David