如何使用CMake生成链接到静态库的DLL

时间:2018-08-09 18:40:19

标签: c++ dll cmake

这个问题的主要目的是编写CMakeLists.txt生成一个动态库,“包含/链接”一个静态库。

让我创建场景:

  • 我的C ++代码是用mycode.cpp编写的
  • 在mycode.cpp中,我从libthirdparty.a(注意.a )中调用了一些函数
  • 我想生成libmylib.so(注意.so )以供其他人动态链接
  • libmylib.so必须“包含” libthirdparty.a

我写这个脚本的尝试是在下面的行:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Werror -m64 -fPIC ")
add_executable(myapp mycode.cpp)
target_link_libraries(myapp thirdparty)
add_library(mylib SHARED myapp)

但是当然这是行不通的,我需要一些帮助来正确地编写它

1 个答案:

答案 0 :(得分:1)

现在,让我们删除myapp并仅关注您要创建的库。

也就是说,这就是你可以做的

cmake_minimum_required(VERSION 3.12)

project(AwesomeLib)

include(GenerateExportHeader)

set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(ThirdParty REQUIRED)

add_library(mylib SHARED mylib.cpp)
target_link_libraries(mylib PUBLIC ThirdParty)

# Note: If you library will be cross-platform, flag should be conditionally specified. Have a look at generator-expression
target_compile_options(mylib PRIVATE -Wall -Werror)

generate_export_header(mylib)

# TODO:
# * add install rules
# * generate config-file package
# * add tests

注意: