Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用CMake生成链接到静态库的DLL_C++_Dll_Cmake - Fatal编程技术网

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

C++ 如何使用CMake生成链接到静态库的DLL,c++,dll,cmake,C++,Dll,Cmake,这个问题的主要目的是编写一个CMakeLists.txt来生成一个动态库,“包含/链接”一个静态库 让我创建一个场景: 我的C++代码写在 MyCalp.CPP < /代码> 在mycode.cpp中,我调用了libthirdparty.a(静态库)中的一些函数 我想生成libmylib.so(共享库),以便其他人动态链接 libmylib.so必须“包含”libthirdparty.a 我试图在下面几行写下这个脚本: set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FL

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

让我创建一个场景:

  • 我的C++代码写在<代码> MyCalp.CPP < /代码>
  • mycode.cpp
    中,我调用了
    libthirdparty.a
    (静态库)中的一些函数
  • 我想生成
    libmylib.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)

当然,这不起作用,我想得到一些帮助来正确编写它。

现在,让我们删除
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
注:

  • generate_export_header
    将使用mylib_export宏生成“mylib_export.h”头,用于导出符号。看
  • 要理解
    查找包(需要第三方)
    背后的思想,我建议您阅读配置文件包。看
  • 了解有关生成器表达式的详细信息。看

试试目标链接库(mylib第三方)在哪里?在执行add_库(mylib SHARED mycode.cpp)之后,只需添加我之前建议的行即可。目标必须存在,才能指定其属性。