在 Python 脚本中对 Windows 中的C++进行命令行编译

Command line compiling of C++ in Windows in Python script

本文关键字:C++ 命令行 编译 中的 Windows Python 脚本      更新时间:2023-10-16

这个想法是编译一个C++程序。它包含一个main.cpp,一个printer.cpp,一个printer.h,一个scanner.cppscanner.h。这些源文件有一个功能打印"hello"。现在我正在尝试通过 Python 脚本从命令行创建目标文件和可执行文件并使用 cl.exe .

我得到的错误是LNK2019所以我知道问题出在链接上。我已经查看了这些选项,我正在将其用于我的 Python !!

build = subprocess.Popen(['vcvarsall.bat', 'amd64_x86', '&&', 'cl',   'kernel32.lib',...[skipping some files]'uuid.lib','/I' + qtpath,'C:\Users\ROY_S\Desktop\CppMaker\main.cpp','/ZI','/Gm','/EHsc','/MDd','/GS','/Fo'+path,'/Fe'+path+'main.exe','/link','/LIBPATH:'+qtlib,'/DEFAULTLIB:'+ qtlib+'QtMainIsar','/DEFAULTLIB:'+ qtlib+'QtCore','/DEFAULTLIB:'+ qtlib+'QtGuiIsar4','/DEFAULTLIB:'+ qtlib+'QtNetwork','/DEFAULTLIB:'+ qtlib+'QtOpenGLIsar4','/DEFAULTLIB:'+ ...[skipping...] qtlib+'QtWebKitIsar4','/INCREMENTAL','/NOLOGO','/TLBID:1','/DYNAMICBASE','/MANIFEST','/NXCOMPAT','/ERRORREPORT:PROMPT','/MACHINE:'+'X86','/OUT:'+path+'main.exe' ]  , stdout=subprocess.PIPE)

我删除了一些库,以便它更容易阅读。我不明白即使在脚本中指定了 lib 文件后如何链接所有内容。

我也可以继续使用其他解决方案,而不是使用cl.exe.任何可以轻松控制命令行的东西我都可以。

在Windows中,我认为使用Visual Studio项目/解决方案并使用MsBuild构建它是一个好主意。项目/解决方案文件可以手动创建,也可以在Visual Studio中创建。您也可以在项目/解决方案中创建属性并在 MsBuild 中传递它们(请参阅 MsBuild 文档)

check = subprocess.Popen(['vcvarsall.bat', 'amd64_x86', '&&',    'msbuild',Path,'/p:configuration=%s' % Configuration])

这解决了我的问题。我没有玩 cl.exe ,而是制作了一个 vcxproj 文件的模板。然后我的代码在 vcxproj 文件中添加源和头文件,并使用 msbuild 对其进行编译。我觉得这是一个更简单的解决方案,因为我不关心要添加的各个库,只需将属性表添加到我的 vcxproj 文件中即可。

另请参阅 https://msdn.microsoft.com/en-us/library/ms164311.aspx

Visual Studio

是最简单的解决方案,尽管如果你真的不喜欢Visual Studio,你可以通过 https://www.cygwin.com/获得gcc