使用 libconfig 库的 C++ 应用程序的 cmake 编译问题

cmake compiling problem for c++ application with libconfig library

我正在尝试 运行 Ubuntu 18.04 上的简单 C++ 应用程序,使用 libconfig 1.7.2使用 vcpkg 版本 2018.11.23-unknownhash(Windows 的 Microsoft C++ 库管理器)安装的库,cmake 版本为 3.14.3.静态库链接良好,包含指定的路径,但错误仍然存​​在。有人可以帮我找到问题吗?

项目目录:

--test2
----cmake
------CMakeHelpers.cmake
----include
------libconfig.h++
----release
----src
------CMakeLists.txt
------test.cpp
----CMakeLists.txt

CMakeLists.txt

cmake_minimum_required(VERSION 3.12)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_VERBOSE_MAKEFILE ON)

############ Project name and version
set (TEST_MAJOR_VERSION 1)
set (TEST_MINOR_VERSION 0)
set (TEST_PATCH_VERSION 0)
set (TEST_VERSION ${TEST_MAJOR_VERSION}.${TEST_MINOR_VERSION}.${TEST_PATCH_VERSION})

# Include our cmake macros
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
include (CMakeHelpers)

add_subdirectory (src)

./src/CMakeLists.txt

init_target (test)
message (STATUS "set project " ${TARGET_NAME})
project (${TARGET_NAME} VERSION ${TEST_VERSION})

file (GLOB SOURCE_FILES
        *.cpp
        )
file (GLOB HEADER_FILES
        *.h
        )

find_library(LIBCONFIG_LOCATION libconfig++)

include_directories(/home/pavels/dev/cpp/test2/include)
include_directories(/home/pavels/dev/cpp/vcpkg/packages/libconfig_x64-linux/include)
include_directories(/home/pavels/dev/cpp/vcpkg/installed/x64-linux/include)

message (STATUS "Found LibConfig: " ${LIBCONFIG_LOCATION})

add_executable(${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(test PRIVATE ${LIBCONFIG_LOCATION})

./src/test.cpp

#include <iostream>
#include <libconfig.h++>

using namespace libconfig;

int main(int argc, char* argv[])
{
        std::cout << "Hello guys" << std::endl;
        Config cfg;

        // Read the file. If there is an error, report it and exit.
        try
        {
                cfg.readFile("example.cfg");
        }
        catch(const FileIOException &fioex)
        {
                std::cerr << "I/O error while reading file." << std::endl;
                return(EXIT_FAILURE);
        }
        catch(const ParseException &pex)
        {
                std::cerr << "Parse error at " << pex.getFile() << ":" << pex.getLine() << " - " << pex.getError() << std::endl;
                return(EXIT_FAILURE);
        }
        return 0;
}

编译源:

>mkdir release;cd release
>../../cmake .. -DCMAKE_TOOLCHAIN_FILE=/home/pavels/dev/cpp/vcpkg/scripts/buildsystems/vcpkg.cmake
-- The C compiler identification is GNU 7.3.0
-- The CXX compiler identification is GNU 7.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- set project test
-- Found LibConfig: /home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pavels/dev/cpp/test2/release

>../../cmake --build .
/home/pavels/cmake/cmake-3.14.3-Linux-x86_64/bin/cmake -S/home/pavels/dev/cpp/test2 -B/home/pavels/dev/cpp/test2/release --check-build-system CMakeFiles/Makefile.cmake 0
/home/pavels/cmake/cmake-3.14.3-Linux-x86_64/bin/cmake -E cmake_progress_start /home/pavels/dev/cpp/test2/release/CMakeFiles /home/pavels/dev/cpp/test2/release/CMakeFiles/prog                                ress.marks
/usr/bin/make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/pavels/dev/cpp/test2/release'
/usr/bin/make -f src/CMakeFiles/test.dir/build.make src/CMakeFiles/test.dir/depend
make[2]: Entering directory '/home/pavels/dev/cpp/test2/release'
cd /home/pavels/dev/cpp/test2/release && /home/pavels/cmake/cmake-3.14.3-Linux-x86_64/bin/cmake -E cmake_depends "Unix Makefiles" /home/pavels/dev/cpp/test2 /home/pavels/dev/c                                pp/test2/src /home/pavels/dev/cpp/test2/release /home/pavels/dev/cpp/test2/release/src /home/pavels/dev/cpp/test2/release/src/CMakeFiles/test.dir/DependInfo.cmake --color=
Scanning dependencies of target test
make[2]: Leaving directory '/home/pavels/dev/cpp/test2/release'
/usr/bin/make -f src/CMakeFiles/test.dir/build.make src/CMakeFiles/test.dir/build
make[2]: Entering directory '/home/pavels/dev/cpp/test2/release'
[ 50%] Building CXX object src/CMakeFiles/test.dir/test.cpp.o
cd /home/pavels/dev/cpp/test2/release/src && /usr/bin/c++   -I/home/pavels/dev/cpp/test2/src -I/home/pavels/dev/cpp/test2/include -I/home/pavels/dev/cpp/vcpkg/packages/libconf                                ig_x64-linux/include -I/home/pavels/dev/cpp/vcpkg/installed/x64-linux/include  -std=gnu++1z -o CMakeFiles/test.dir/test.cpp.o -c /home/pavels/dev/cpp/test2/src/test.cpp
[100%] Linking CXX executable test
cd /home/pavels/dev/cpp/test2/release/src && /home/pavels/cmake/cmake-3.14.3-Linux-x86_64/bin/cmake -E cmake_link_script CMakeFiles/test.dir/link.txt --verbose=1
/usr/bin/c++    -rdynamic CMakeFiles/test.dir/test.cpp.o  -o test /home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::Config()':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:320: undefined reference to `config_init'
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:321: undefined reference to `config_set_hook'
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:322: undefined reference to `config_set_destructor'
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:323: undefined reference to `config_set_include_func'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::~Config()':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:330: undefined reference to `config_destroy'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::clear()':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:338: undefined reference to `config_clear'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::setOptions(int)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:345: undefined reference to `config_set_options'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::getOptions() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:352: undefined reference to `config_get_options'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::setOption(libconfig::Config::Option, bool)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:359: undefined reference to `config_set_option'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::getOption(libconfig::Config::Option) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:366: undefined reference to `config_get_option'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::setTabWidth(unsigned short)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:385: undefined reference to `config_set_tab_width'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::getTabWidth() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:392: undefined reference to `config_get_tab_width'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::setFloatPrecision(unsigned short)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:399: undefined reference to `config_set_float_precision'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::getFloatPrecision() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:406: undefined reference to `config_get_float_precision'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::setIncludeDir(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:413: undefined reference to `config_set_include_dir'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::evaluateIncludePath(char const*, char const**)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:427: undefined reference to `config_default_include_func'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::read(_IO_FILE*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:455: undefined reference to `config_read'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::readString(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:463: undefined reference to `config_read_string'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::write(_IO_FILE*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:471: undefined reference to `config_write'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::readFile(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:478: undefined reference to `config_read_file'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::writeFile(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:486: undefined reference to `config_write_file'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::lookup(char const*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:494: undefined reference to `config_lookup'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Config::exists(char const*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:505: undefined reference to `config_lookup'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::Setting(config_setting_t*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:639: undefined reference to `config_setting_get_format'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::setFormat(libconfig::Setting::Format)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:673: undefined reference to `config_setting_set_format'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator bool() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:682: undefined reference to `config_setting_get_bool'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator int() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:691: undefined reference to `config_setting_get_int'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator unsigned int() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:700: undefined reference to `config_setting_get_int'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator long long() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:731: undefined reference to `config_setting_get_int64'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator unsigned long long() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:740: undefined reference to `config_setting_get_int64'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator double() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:751: undefined reference to `config_setting_get_float'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator float() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:761: undefined reference to `config_setting_get_float'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator char const*() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:770: undefined reference to `config_setting_get_string'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator std::__cxx11::basic_string<char, std::c                                har_traits<char>, std::allocator<char> >() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:779: undefined reference to `config_setting_get_string'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(bool)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:794: undefined reference to `config_setting_set_bool'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(int)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:805: undefined reference to `config_setting_set_int'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(long long const&)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:826: undefined reference to `config_setting_set_int64'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(double const&)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:837: undefined reference to `config_setting_set_float'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(float)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:850: undefined reference to `config_setting_set_float'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:861: undefined reference to `config_setting_set_string'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator=(std::__cxx11::basic_string<char, std::                                char_traits<char>, std::allocator<char> > const&)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:872: undefined reference to `config_setting_set_string'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::lookup(char const*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:883: undefined reference to `config_setting_lookup'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator[](char const*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:897: undefined reference to `config_setting_get_member'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::operator[](int) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:912: undefined reference to `config_setting_get_elem'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::exists(char const*) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1004: undefined reference to `config_setting_get_member'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::getLength() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1013: undefined reference to `config_setting_length'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::getIndex() const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1083: undefined reference to `config_setting_index'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::remove(char const*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1092: undefined reference to `config_setting_remove'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::remove(unsigned int)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1103: undefined reference to `config_setting_remove_elem'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::add(char const*, libconfig::Setting::Type)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1118: undefined reference to `config_setting_add'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::add(libconfig::Setting::Type)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1152: undefined reference to `config_setting_add'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::assertType(libconfig::Setting::Type) const':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1192: undefined reference to `config_get_option'
/home/pavels/dev/cpp/vcpkg/installed/x64-linux/debug/lib/liblibconfig++.a(libconfigcpp.cc.o): In function `libconfig::Setting::wrapSetting(config_setting_t*)':
/home/pavels/dev/cpp/vcpkg/buildtrees/libconfig/src/v1.7.2-ddbd1a1da6/lib/libconfigcpp.c++:1208: undefined reference to `config_setting_set_hook'
collect2: error: ld returned 1 exit status
src/CMakeFiles/test.dir/build.make:87: recipe for target 'src/test' failed
make[2]: *** [src/test] Error 1
make[2]: Leaving directory '/home/pavels/dev/cpp/test2/release'
CMakeFiles/Makefile2:93: recipe for target 'src/CMakeFiles/test.dir/all' failed
make[1]: *** [src/CMakeFiles/test.dir/all] Error 2
make[1]: Leaving directory '/home/pavels/dev/cpp/test2/release'
Makefile:86: recipe for target 'all' failed
make: *** [all] Error 2

此问题已通过附加链接 libconfig 库解决,其中定义了未定义的函数。

./src/CMakeLists.txt

init_target (test)
message (STATUS "set project " ${TARGET_NAME})
project (${TARGET_NAME} VERSION ${TEST_VERSION})

file (GLOB SOURCE_FILES
        *.cpp
        )
file (GLOB HEADER_FILES
        *.h
        )

find_library(LIBCONFIGPP_LOCATION libconfig++)
find_library(LIBCONFIG_LOCATION libconfig)

include_directories(/home/pavels/dev/cpp/test2/include)
include_directories(/home/pavels/dev/cpp/vcpkg/packages/libconfig_x64-linux/include)
include_directories(/home/pavels/dev/cpp/vcpkg/installed/x64-linux/include)

message (STATUS "Found LibConfig++: " ${LIBCONFIGPP_LOCATION})
message (STATUS "Found LibConfig: " ${LIBCONFIG_LOCATION})

add_executable(${TARGET_NAME} ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(test PRIVATE ${LIBCONFIGPP_LOCATION} ${LIBCONFIG_LOCATION})