我有一个更大的代码在 Linux 中运行,用 c++ (c++11) 和 python 编写并使用大量库(VTK、boost、pyqt、OpenGL)并编译为 python 扩展模块(和这些模块的插件)和纯 python 模块(主程序是 python 脚本)。代码是跨平台的(除了少数异常(exception),例如 dlopen
、gettimeofday
可以通过 #ifdef 替换为 Windows 等价物)和编译器不可知(它编译为 -ansi
,以及一些特定于编译器的东西,如 __attribute__
,如果需要的话,希望也可以被替换)。
我正在尝试在 Windows 上进行编译,但我完全不知道应该如何进行(我在 Linux 开发方面相当有经验,但自 90 年代后期以来我就没有使用过 Windows)。
我应该使用 mingw 还是 MSVC 编译器?我最好交叉编译吗?我是否需要通过从网络下载安装程序来“手动”安装依赖项?我还需要编译那些吗?是否有包含文件的标准路径,或者是否要检测所有文件?如果我设法编译它,如何制作某种包(它是纯 Python 模块和共享库的 bundle )?
我想我不是第一个试图了解它在 Windows 下如何工作的人(我想我被包管理器和 Linux 中所有对开发人员友好的东西宠坏了),也许某处有有用的引用。
最佳答案
我认为您在这里的选择取决于您在 Windows 下编译的目标。您是否准备让其他可以选择其开发平台的开发人员参与进来?你想使用不同的编译器来生成额外的警告吗?您要在 Windows 平台上部署应用程序吗?提出这些问题应该有助于您做出更明智的决定。
这里有一些建议...
- 尝试 MSVC 也没什么坏处。 2010 速成版是最后一个支持标准 C++ 开发的免费版本。 future 的 Express 版本仅适用于“Metro”应用程序。我会权衡一下您的 Windows 开发目标,然后做出相应的选择。
- 对于跨平台构建,看看您是否可以实现标准化构建系统,例如 CMake 或 SCons。
- 无论最终决定如何,我都不会附带依赖项。开源要求开发人员单独下载依赖项是标准做法。只要确保包含当前稳定版本与您的应用程序不向后兼容的任何内容的版本信息。 (或者更好的是,解决这些问题,这样您就可以从 3rd 方代码中获得最新修复的好处。)Python 至少应该是开发人员的责任。它旨在被安装,并且 pywin32 扩展将在 Windows 安装的系统注册表中注册 COM 项。
- 就招聘开源开发人员而言,您可能会发现要求在开发人员的机器上安装 MinGW 会阻碍一些专门的 MSVC 用户从事该项目。
关于c++ - 在 Windows 上编译+分发 Linux 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11314253/