在 Python 脚本中对 Windows 中的C++进行命令行编译
Command line compiling of C++ in Windows in Python script
这个想法是编译一个C++程序。它包含一个main.cpp
,一个printer.cpp
,一个printer.h
,一个scanner.cpp
和scanner.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,你可以通过 https://www.cygwin.com/获得gcc
- 从命令行c++发送文本文件名
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 数组长度,为什么从命令行获取时不能使用它?
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 通过 Openssl 命令行加密,通过 c++ 解密
- CMake "--target install"无需"--build"命令行
- 更改命令行 qt5 源代码构建配置的正确/快速方法
- 使用 C++ 将命令行参数拆分为参数/向量
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- LLVM | codegen 用于带有命令行选项的程序输入功能
- 如何在OMNET++中添加专门的命令行参数?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- 在命令行中创建快捷命令
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- C++命令行提示符不应重复
- 如何在不传递命令行参数的情况下在 c++ 中设置环境变量
- 通过命令行在Visual Studio中编译单个独立文件