c++ - 如何将 opendnp3 添加为静态 C++ 库

标签 c++ cmake include static-libraries dnp3

我目前正在尝试设置 opendnp3 C++ library作为静态库。我已经按照 their build guide for Windows 构建了解决方案并且已经能够生成几个我认为是静态库的 .lib 文件。

在一个完全独立的文件夹中,我在以下文件夹结构下有以下文件:

C:/Development/C++/opendnp3/lib/ # .lib files are contained in this directory

C:/Development/pybexample/
--> CMakeLists.txt
--> src/
    --> test.cpp

我将 CMakeLists.txt 配置如下:

cmake_minimum_required(VERSION 2.8)
project(pybexample)

set(SOURCE_FILES src/test.cpp)

add_library(opendnp3 STATIC IMPORTED)
set_target_properties(opendnp3 PROPERTIES IMPORTED_LOCATION C:/Development/C++/opendnp3/lib/opendnp3.lib)

add_executable(pybexample ${SOURCE_FILES})
target_link_libraries(pybexample opendnp3)

在 test.cpp 中,我只是调用:

#include <iostream>
#include "opendnp3/LogLevels.h"
using namespace std;

int main(void) {
    cout << "Hello world!" << endl;
    system("pause");
}

但是,当我尝试构建 test.cpp 时,我收到一条错误消息:“无法打开包含文件:‘opendnp3/LogLevels.h’:没有这样的文件或目录”。我觉得一定有一些我错过的非常基本的东西,但我对使用静态库和 CMake 还很陌生,所以我似乎无法弄清楚。谁能就我的包含失败的原因提供一些建议?

最佳答案

原来这是由两个问题引起的。

第一个问题是我需要在我的 CMakeLists.txt 中添加一行这会将 opendnp3 的头文件添加到我的项目中。这是通过添加 include_directories(<path_to_headers>) 来实现的。在 add_executable(pybexample ${SOURCE_FILES}) 之前线。

然而,在这样做的过程中,我也清楚地发现了第二个问题:我没有正确构建库,因为它没有为库生成任何 header 。原来我忽略了 run the INSTALL project 的说明.设置 CMAKE_INSTALL_PREFIX 并运行 INSTALL 项目后,库和 header 已生成并可供使用。

关于c++ - 如何将 opendnp3 添加为静态 C++ 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54936467/

相关文章:

c++ - 如何确定表达式值的类型?

c++ - utfcpp 和 Win32 宽 API

c++ - 如何将在依赖项 CMake 项目中创建的 Protobuf 生成的 .h 文件正确导入父 CMake 项目?

cmake - 在 CMake 配置时构建程序

c - #include 守卫不起作用,#pragma Once 已过时

c++ - 为什么我必须在*左移之前将 `uint8_t` 转换为 `uint64_t`?

c++ - 'char x[]' 是什么意思?

c++ - 如何将 libs 和 dlls 添加到 cmake 中的项目中?

php - 包括/要求路径解析

c++ - 是否建议使用 extern 来避免 header 依赖?