我目前正在尝试将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还是很陌生,所以我似乎无法弄清楚。谁能帮助我指出为什么我的include失败的提示?
答案 0 :(得分:0)
事实证明,这是由两个问题引起的。
第一个问题是我需要在CMakeLists.txt
中添加一行,以便将opendnp3的头文件添加到我的项目中。这是通过在include_directories(<path_to_headers>)
行之前添加add_executable(pybexample ${SOURCE_FILES})
来完成的。
但是,这样做也很明显,还有第二个问题:我没有正确构建该库,因为它没有使用该库生成任何标头。原来我忽略了对run the INSTALL project的说明。设置CMAKE_INSTALL_PREFIX并运行INSTALL项目后,就生成了库和标头,可以使用了。