我维护一个Cython绑定到一些OCaml代码(通过他们各自的C接口)。对于以前的版本,我设法通过交叉编译为Windows分发轮盘文件。现在,我最终管理一个干净的本地方式来生成Windows 64位库。如何更改setuptools构建过程(msvc)中的链接命令?
对于32位交叉编译版本,我在我的setup.py
中有一个特定的目标,并带有正确的命令来执行。返回在Windows上,我想坚持做的setuptoolsic方式,但事情是我需要用不同的工具来取代常规的链接命令link.exe
(RESP。flexlink.exe
,与OCaml的附带在Windows上)
不要惊慌:flexlink.exe
只是在编译和连接正常的link.exe
之前编译一些汇编程序狗屎。这是在Windows下链接OCaml可执行文件和共享库的正确方式。
为MacOS和Linux,传统Extension
图案就像一个魅力如下(mlobject
由OCaml的一些时间戳检查后产生的文件中前面一点,asmrunlib
是的python36.dll
为OCaml的等效的完整路径):
extensions = [
Extension("foo",
["foo.pyx", "interface_c.c"],
language="c",
include_dirs=INCLUDE,
extra_compile_args=compileargs,
extra_link_args=[mlobject, asmrunlib, ]
)
]
比方说,我限制自己的Python> = 3.5,我想(通过与像NumPy这样过大的项目比较),我需要通过扩展distutils._msvccompiler.MSVCCompiler
启动和基于flexlink.exe
东西代替self.linker = _find_exe("link.exe", paths)
。
问题是,我不知道他们如何管理接下来的管道工作(连接此扩展编译器,并使其看起来像正常的msvc到安装过程)。我认为它在任何地方都没有完整的记录,如果他们能够做的比NumPy更多,我应该能够以某种方式达到我的目标。
我的setup.py
仍然是合理的基础,并且将整个建筑/包装过程保存在一个单一文件中的解决方案将非常棒!
万一你没有得到回答在这里,也尝试setuptools的邮件列表:https://mail.python.org/pipermail/distutils-sig/ –
发现这个答案有点相关,提到MSVC distutils编译器:http://stackoverflow.com/questions/36212494/get-the-commands-distutils-passes-to-the-compiler/36710903#36710903 –
问题也可以在邮件列表上找到:https://mail.python.org/pipermail/distutils-sig/2017-March/030211.html – xoolive