是否有首选的规范方式在 Windows 上分发 C/C++ 开发包(无源代码)?
Posted
技术标签:
【中文标题】是否有首选的规范方式在 Windows 上分发 C/C++ 开发包(无源代码)?【英文标题】:Is there a preferred canonical way to distribute C/C++ development packages (without source) on windows? 【发布时间】:2017-10-26 16:04:53 【问题描述】:是否有首选的规范方式将开发包(例如 DLL 和标头)分发给 Windows 上的开发人员(无源代码)?
来自 Linux 背景,我的偏好是将项目拆分为三个包:
运行时 - 例如libfoo-1.2.3.rpm
包含 /opt/foo/lib/libbar.so -> /opt/foo/lib/libbar.so.1.2.3
开发包 - 例如libfoo-devel.1.2.3.rpm
包含 /opt/foo/include/bar.h
源包 - 例如libfoo.1.2.3-src.tgz
包含源代码和构建机制
如果给定一个具有类似目录布局的 zip 文件,我预计很少有 Windows 开发人员会抱怨。 例如
foo-devel.zip:
foo/doc/foobar.pdf
foo/include/bar.h
foo/lib/libbar.dll
foo/lib/libbar.lib
仅出于完整性考虑(题外话),运行时可能是:
foo-runtime.zip:
foo/doc
foo/lib/libbar.dll
或:
foo-runtime.msi
- 将libbar.dll
安装到适当的位置
但是我仍然很好奇是否真的有一种首选的方法?
例如,您是否应该提供一个 foo-devel.msi 以安装在构建机器上?
我对应该进入图书馆的问题不感兴趣。 任何人都可以看到,例如Distributing (native C++) libraries on windows
如果提供 C++ 接口而不是仅提供 C 接口,仍然值得牢记 ABI 兼容性问题。
另一个相关问题是Is there a best practices guide to distributing native C libraries for Windows?。这个问题涵盖了什么,但这个问题问如何。
【问题讨论】:
没有规范的方法,并且使用您的库的项目可能不得不重新分发 dll(安装在系统文件夹中是在寻求 Windows 上的问题),所以我看不出提供一个单独的 windows 运行时包。 作为(世界上)排名第一的开发人员,当您从 github、svn、tfs 等的存储库中签出代码时,您通常会获得 dll 作为源代码的一部分。相同的过程适用于 #2开发者.. @Felix Palmen 正如我所说的运行时部分是题外话。你是对的,除了大的运行时,比如 directX @numbtongue:正如我所说,这是为了分发库供开发人员使用无源代码。当我提供源代码时,我可能会提供 FindFoo.cmake 以及指向 github 或任何地方的链接。 我将改写为开发包。它不仅是 DLL,还包括头文件、导出/导入库和文档。 【参考方案1】:在 Windows 上分发可再分发文件的规范(在一定程度上)方式是 Windows Installer Merge Module (msm)。它旨在集成到另一个 Windows Installer (msi) 包中。 DLL 应该去那里,因为它们是运行时需要的文件。
对于开发文件(例如头文件、库等),在 Windows 的文件系统中没有标准的组织方式。因此,它可以是一个简单的存档或一个 msi 包。对于 msi 包,不需要管理员帐户来安装它是有意义的。
【讨论】:
以上是关于是否有首选的规范方式在 Windows 上分发 C/C++ 开发包(无源代码)?的主要内容,如果未能解决你的问题,请参考以下文章
C ++将向量传递给函数:引用与指针,哪个是首选? [复制]