最近,我一直在使用 cmake 作为我的项目的生成器。我已经成功生成了许多 vtk 和其他应用程序项目。但是,我现在在尝试链接动态和静态预编译库时遇到了问题。特别是,我获得了一些动态预编译的第三方 dll 以及它们各自的 .lib 文件。此外,我正在尝试将一些静态预编译库(仅 .lib 文件)链接到我的项目,以便检查软件许可证。
假设我的项目名为 test_example,并且在 libs 目录中有一些预编译的动态库。我的项目目录的结构是:
Test_example
-/include
-/libs
-/build
-CMakeLists.txt
用于链接动态库的 CMakeLists.txt 内容如下:
cmake_minimum_required(VERSION 2.8.9)
project (test_example)
set(CMAKE_BUILD_TYPE Release)
#For the shared libraries:
set (PROJECT_LINK_LIBS dynamic_1.dll dynamic_2.dll )
set (PROJECT_LINK_DIR ${test_example_SOURCE_DIR}/libs/)
set (PROJECT_INCLUDE_DIR ${test_example_SOURCE_DIR}/include/)
link_directories(${PROJECT_LINK_DIR})
include_directories(${PROJECT_INCLUDE_DIR})
add_executable(test_example test_example.cpp)
target_link_libraries(test_example ${PROJECT_LINK_LIBS})
当我使用这个 cmake 列表生成项目时,我可以成功地使用预编译的 dll 中的方法。但是,我也没有找到一种方法来链接我的静态库。假设我有一个名为 test_licence.lib 的静态库。我是否也应该将它放在 libs 文件夹中,并像使用动态一样简单地引用它?当我这样做并在 Visual Studio 中打开我的项目解决方案时,我可以看到动态和静态库都已添加到 Linker-->Input-->Additional DEpendencies。但是,当我尝试构建项目时,我有未解决的外部依赖项,它们是来自静态库的方法。
你们有谁知道实现这一目标的最有效方法是什么?提前谢谢了!