MSVC 不通过 cmake 生成 lib

Posted

技术标签:

【中文标题】MSVC 不通过 cmake 生成 lib【英文标题】:MSVC do not generate lib via cmake 【发布时间】:2018-06-05 04:10:05 【问题描述】:

CMakeLists:

if (MSVC)
    set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
endif()
add_library($PROJECT_NAME SHARED $SOURCES)

CMake 2.8.12 + MSVC 2015

配置输出:

-- The C compiler identification is MSVC 19.0.24210.0
-- The CXX compiler identification is MSVC 19.0.24210.0
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMAKE_C_FLAGS_DEBUG is /D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
CMAKE_C_FLAGS_RELEASE is /MD /O2 /Ob2 /D NDEBUG
CMAKE_C_FLAGS_RELWITHDEBINFO is /MD /Zi /O2 /Ob1 /D NDEBUG
CMAKE_C_FLAGS_MINSIZEREL is /MD /O1 /Ob1 /D NDEBUG
-- Configuring done
-- Generating done

推荐https://cmake.org/pipermail/cmake/2009-March/027990.html

您很可能尚未将您的类和/或函数调用设置为 出口。如果您没有导出的类/函数,Visual Studio 不会 为您生成一个导入库。

但是添加CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON 得到了相同的结果。

如何让MSVC生成类似mingw的lib&dll?

【问题讨论】:

【参考方案1】:

cmake 2.8 更新到 3.4 即可解决问题。

https://cmake.org/cmake/help/v3.4/release/3.4.html?highlight=windows_export_all_symbols

【讨论】:

以上是关于MSVC 不通过 cmake 生成 lib的主要内容,如果未能解决你的问题,请参考以下文章

使用 cmake 和 msvc 2010 构建 gdcm 2.4.1 无法获取所有 dll

从命令行在CMake项目上设置MSVC运行时

CMake与MSVC工程化实践

CMAKE_GNUtoMS:将GNU格式库转换为MSVC格式

使用 C++ 脚本自动化 CMake 构建

Mac平台 使用CMake编译iOS lib