在Windows上将外部动态库与CMake链接

时间:2017-05-09 01:43:33

标签: c++ cmake

TL; DR 我编译了一个库,并将所需的所有内容放在一个目录中(即.lib,.dll和.h文件)。我正在使用Clion处理不同目录中的项目。我需要项目包含这些标头,并链接到那些可在运行时访问的库。我还不需要一个真正的跨平台CMake文件:我只需要构建并运行在我的机器上工作。

我已查看过该主题的所有其他帖子,但未能找到我可以复制的清晰简洁的解决方案。我希望找到明确的答案。

一些背景:自从过去几年在Java和Python工作以来,我回到了用C ++开发。我目前只能在64位Windows环境中工作。我的开发堆栈是CLion + Cygwin64 + Cmake + Clang。我们将使用POCO库,所以我决定尝试一下。我在本地构建了64位库,并将生成的安装放在一个方便的位置。我需要将这些库链接到一个不同的项目中,但我没有运气,因为我是CMake的新手,还没有完全理解它的行为。

从功能上讲,我的目录结构如下:

C:/somedir/Poco
           ├─── bin        # e.g. PocoFoundation.dll
           ├─── lib        # e.g. PocoFoundation.lib
           └─── include    # e.g. Poco/Poco.h, Poco/Component/component.h

C:/otherdir/project
           ├─── main.cpp
           └─── CMakeLists.txt

我试图以多种方式进行此项运行。以下结果是包含外部头文件并且构建成功,但是可执行文件在运行时失败,带有“...未定义的对Library :: Component :: Class :: method()的引用”异常:

cmake_minimum_required(VERSION 3.7)
project(project)
set(CMAKE_CXX_STANDARD 11)
set(SOURCE_FILES main.cpp)
add_executable(project ${SOURCE_FILES})

set(POCO_PREFIX      "C:/somedir/Poco")
set(POCO_INCLUDE_DIR "${POCO_PREFIX}/include")
set(POCO_LIB_DIR     "${POCO_PREFIX}/lib")
set(POCO_LIBS "${POCO_LIB_DIR}/PocoFoundation.lib" "${POCO_LIB_DIR}/PocoUtil.lib")

target_include_directories(project PRIVATE "${POCO_INCLUDE_DIR}")
target_link_libraries(project "${POCO_LIBS}")

我还尝试了the instructions here之后的find_packages方法,并使用查找模块found here,根据我的需要进行了调整(即只使用版本配置稍微不同的库命名)。然而,即使我通过message()确认cmake正在寻找正确目录中的正确文件,但是第一个地方仍然无法构建,其中find脚本退出第176行。

我知道这应该相对简单,但尽管如此,我还是找不到任何简单的文档。任何帮助将不胜感激。

0 个答案:

没有答案