QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境

QCAD 是一个免费、开源的计算机辅助绘图二维工具,功能强大。目前开源的二维CAD有QCAD、LibreCAD等,LibreCAD可以说是QCAD的分支版本。对比这两款开源软件,LibreCAD是纯C++开发,有boost库的依赖,源码比较重,而QCAD使用了Qt的Script模块(ECMAScript 5 - JavaScript 5),使用了C++和Javascript脚本两种开发方式。使用脚本来扩展功能比纯C++开发效率会高点,因为这些开源项目源码都很大,编译比较花时间。如果使用脚本来开发的话,没有编译时间,可以边写脚本边测试,很方便。

因为项目的需要,本人选择QCAD,并对其源码进行编译。本篇博文中,使用了VS2017+Qt5.12.5对QCAD v3.23.0.2版本的源码进行了成功的编译和运行。

一、环境准备

1、VS2017,Qt5.12.5/x86,Qt VS Tools插件

Index of /official_releases/qt

2、检查一下Windows环境变量是否正确:

设置Windows的环境变量。推荐使用工具Rapid Environment Editor。About - Rapid Environment Editor

Path=F:\Qt\Qt5.12.5\5.12.5\msvc2017\bin

QTDIR=F:\Qt\Qt5.12.5\5.12.5\msvc2017

3、QCAD官网下载源码

QCAD - QCAD: 2D CAD  官网域名1

QCAD - QCAD: 2D CAD  官网域名2

QCAD - Downloads dxflib库源码

QCAD - Downloads dxflib库源码

https://github.com/qcad/qcad/tree/master/src/3rdparty/dxflib dxflib库源码

QCAD - Changelog 历次版本更新日志

https://github.com/qcad/qcad QCAD源码

QCAD: Introduction, Overviews, Howtos
4、解压源码包,确保以下文件夹存在(因为QCAD使用了Qt的Script模块,使用了C++和Javascript脚本两种开发方式。),若不存在则手动添加:

\QCAD\qcad-3.23.0.2\src\3rdparty\qt-labs-qtscriptgenerator-5.12.5

例如笔者的路径下原本就没有qt-labs-qtscriptgenerator-5.12.5,我把qt-labs-qtscriptgenerator-5.12.3拷贝为5.12.5,并且把qt-labs-qtscriptgenerator-5.12.3.pro文件名修改为qt-labs-qtscriptgenerator-5.12.5.pro

5、打开VS2017,主菜单->Qt VS Tools->打开qcad.pro文件,最后可能会提示出错(Import): Error(s): 23,没关系,不管它。

[15] - MAKEFILE_GENERATOR variable not set as a result of parsing : qcad-3.23.0.2.pro. Possibly qmake was not able to find files included using "include(..)" - enable qmake debugging to investigate more.

[16] - Project MESSAGE: ..\qcad-3.23.0.2

[17] - Project MESSAGE: ..\qcad-3.23.0.2.zip

[18] - Project MESSAGE: ..\qcad-3.vcxproj

[19] - Project MESSAGE: ..\qcad-3.vcxproj.filters

[20] - Project MESSAGE: ..\qcad-3.23.0.2

[21] - Project MESSAGE: ..\qcad-3.23.0.2.zip

[22] - Project MESSAGE: ..\qcad-3.vcxproj

[23] - Project MESSAGE: ..\qcad-3.vcxproj.filters

--- (Import): Error(s): 23

--- (qmake) : Exit Code: 3
 

二、编译qcadqt-labs-qtscriptgenerator-5插件(这个插件很重要,必须编译)

Qt脚本生成器是为Qt脚本生成Qt绑定的工具。 使用生成的绑定,您可以从Qt脚本中访问Qt API的大部分。 该插件源码来自:

GitHub - shibukawa/qtscriptgenerator: provide qt5 bindings for qtscript

https://github.com/sjinks/qtscriptgenerator

因为qcad与界面相关的功能都是用JavaScript脚本实现,所以需要编译Qt的脚本实现。找到源码的src目录中的3rdparty文件夹中与Qt版本对应的qt-labs-qtscriptgenerator,里面会已经生成了VS的解决方案。直接用VS打开解决方案,全部编译即可。

VS2017打开工程,编译:

\qcad-3.23.0.2\src\3rdparty\qt-labs-qtscriptgenerator-5.12.5\qcadqt-labs-qtscriptgenerator-5.sln

三、编译主程序

VS2017打开工程,编译:

\qcad-3.23.0.2\qcadqcad.sln

编译成功后,文件都会生成在指定的目录中,直接打开源码下面的debug文件中的qcad.exe即可以运行QCAD了。

四、常见问题解答

1、自己编译的debug或者release版本一运行自动退出了,怎么回事?

解决办法:需要编译qcadqt-labs-qtscriptgenerator-5插件就可以解决。编译的结果文件在路径:

\qcad-3.23.0.2\plugins\script\

注意:qcadqt-labs-qtscriptgenerator-5.sln不管是Debug还是Release的的编译结果的默认路径都是同一个,文件名也相同。这就比较麻烦了,编译完debug,再编译release的话,会把debug文件覆盖掉。这里请程序员注意一下。如果只是学习源码的话,release版本可暂不编译,只用debug版本即可了。

2、编译报错:error MSB6006: “cmd.exe”已退出,代码为 2

1>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(209,5): error MSB6006: “cmd.exe”已退出,代码为 2。
1>已完成生成项目“.vcxproj”的操作 - 失败。

解决办法:选择项目,右键点击“Convert project to Qt  VS Tools project”,然后再次编译即可OK!
3、编译qcadcore和qcad时,报错:error LNK1104: 无法打开文件“\.obj”

工程-属性-链接器-输入-附加依赖项-lib的路径错乱了,如图:

修改为:

4、编译qcaddxf报错:

\qcad-3.23.0.2\src\io\dxf\rdxfimporter.cpp(130): error C2664: “bool DL_Dxf::in(std::istream &,DL_CreationInterface *)”: 无法将参数 1 从“std::ifstream”转换为“const std::string &”

解决办法:

#ifdef Q_OS_WIN
    wchar_t* winfn = new wchar_t[2000];
    int len = fileName.toWCharArray(winfn);
    winfn[len] = '\0';
   把 //bool success = dxflib.in(std::ifstream(winfn, std::ifstream::in), this);
	替换为bool success = dxflib.in((const char*)fileName.toUtf8(), this);

5、编译qcadscripts报错:

4>qrc_scripts_release.obj : error LNK2005: "int __cdecl qInitResources_scripts(void)" (?qInitResources_scripts@@YAHXZ) 已经在 qrc_scripts.obj 中定义
4>qrc_scripts_release.obj : error LNK2005: "int __cdecl qCleanupResources_scripts(void)" (?qCleanupResources_scripts@@YAHXZ) 已经在 qrc_scripts.obj 中定义
4>  正在创建库 ..\..\plugins\\qcadscripts_debug.lib 和对象 ..\..\plugins\\qcadscripts_debug.exp
4>..\..\plugins\\qcadscripts_debug.dll : fatal error LNK1169: 找到一个或多个多重定义的符号

原因:不小心点击了菜单项Convert custom build steps to Qt/MSBuild

解决办法:重新打开qcad.pro文件,生成\qcad-3.23.0.2\src\scripts\qcadscripts.vcxproj.filters和qcadscripts.vcxproj文件。记住,千万不要再点击刚才提到的菜单项了。

6、QCAD所有的UI界面都是使用js实现的,入口是:\scripts\autostart.js

QCAD应用程序框架提供了CAD特定的功能,如CAD核心、DXF导出和导入、强大的图形视图等。ECMAScript文件将可用的功能组合到一个应用程序中。QCAD应用程序框架的ECMAScript接口可用于非常快速地构建和扩展CAD特定的应用程序。QCAD用户界面本身及其所有的交互工具以及大多数小部件和对话框都是通过ECMAScript接口实现的。每个QCAD包都附带的QCAD可执行文件本质上是一个脚本解释器,它具有标准的ECMAScript功能,此外还提供了Qt API和QCAD API的附加类。在一个独立的环境中运行QCAD可执行文件将不起任何作用,因为没有要执行的ECMAScripts。默认情况下,QCAD可执行文件通过查找一个名为“scripts/autostart.js”的文件开始执行。在QCAD中,自动启动脚本初始化了所有ECMAScript工具和用户界面组件并启动主应用程序循环。QCAD中当前可用的几乎所有小部件、菜单和工具都是在ECMAScript中实现的。这些脚本文件位于下载的QCAD软件包的“scripts”目录下。注意,在Mac OS X下,脚本目录位于“QCAD.app/ content/Resources/scripts”下的应用程序包中。

关于脚本的使用教程:QCAD - Tutorial: Script Programming 

7、QCAD的软件配置文件在:C:\Users\<用户名>\AppData\Roaming\QCAD\QCAD3.ini

8、如何在windows的dos环境下启动QCAD?

qcad.exe "C:\Users\firecat\Documents\dxf\555.dxf"
qcad.exe -exec scripts/File/OpenFile/OpenFile.js

9、依赖的Qt lib:

---Debug---

Qt5PrintSupportd.lib
Qt5Svgd.lib
Qt5OpenGLd.lib
Qt5Helpd.lib
Qt5UiToolsd.lib
Qt5Designerd.lib
Qt5Widgetsd.lib
Qt5Guid.lib
Qt5Scriptd.lib
Qt5ScriptToolsd.lib
Qt5Sqld.lib
Qt5XmlPatternsd.lib
Qt5Networkd.lib
Qt5Xmld.lib
Qt5Cored.lib
qtmaind.lib

---Release---
Qt5PrintSupport.lib
Qt5Svg.lib
Qt5OpenGL.lib
Qt5Help.lib
Qt5UiTools.lib
Qt5Designer.lib
Qt5Widgets.lib
Qt5Gui.lib
Qt5Script.lib
Qt5ScriptTools.lib
Qt5Sql.lib
Qt5XmlPatterns.lib
Qt5Network.lib
Qt5Xml.lib
Qt5Core.lib
qtmain.lib

---

相关学习资料:

编译QCAD - opencascade - 博客园

https://doc.qt.io/qt-5.12/qtscript-index.html Qt Script

https://doc.qt.io/qt-5.12/qscriptengine.html QScriptEngine

https://doc.qt.io/qt-5.12/qscriptenginedebugger.html Qt Script断点调试

ECMAScript

https://blog.csdn.net/tianyapai/article/category/8548350 QCad源码分析

https://blog.csdn.net/tianyapai/article/category/8500765 Qt Script翻译

QCAD与libreCAD的试用及比较,QCAD比libreCAD更好用,功能更强大

### 回答1: QCAD源码编译过程中没有生成qcad.exe的原因可能有以下几种: 1. 编译过程中出现了错误或警告:在编译源码的过程中,可能会出现一些错误或警告信息,这些问题可能会导致生成的可执行文件不存在。需要检查编译过程中的日志信息,查找并解决出现的错误。 2. 编译配置问题:在进行源码编译时,可能需要进行一些配置操作,例如指定生成的可执行文件的名称、路径等。如果配置不正确,可能导致生成的可执行文件不存在。需要仔细检查编译配置,确保生成的可执行文件的相关设置正确无误。 3. 缺少依赖项:在编译源码时,可能需要依赖一些第三方或工具。如果缺少了这些依赖项,可能会导致生成的可执行文件不存在。需要查看编译过程中的依赖项信息,确保所有依赖项都已正确安装并配置。 4. 操作系统兼容性问题:有些情况下,源码可能只能在特定的操作系统上编译成功。如果您的操作系统与源码不兼容,可能无法生成可执行文件。需要确认您的操作系统是否符合源码的兼容要求,如果不符合,可能需要考虑更换操作系统或寻找适应您当前环境的其他解决方案。 综上所述,QCAD源码编译没有生成qcad.exe可能是由于编译过程中的错误、配置问题、缺少依赖项或操作系统兼容性等原因所致。您可以详细检查编译过程中的日志信息、编译配置、依赖项安装以及操作系统兼容性,以解决生成qcad.exe的问题。 ### 回答2QCAD是一个开源的计算机辅助设计(CAD)软件,使用C++语言编写。为了编译QCAD源码并生成可执行文件(qcad.exe),您需要按照以下步骤进行操作: 1. 首先,确保您的计算机已经安装了适当的开发环境,如GCC编译器、CMake和Qt开发工具包。 2. 下载QCAD源码压缩包,可以从QCAD的官方网站或者GitHub仓获取。 3. 解压源码压缩包到您选择的目录中。 4. 打开命令行终端,并导航到源码目录。 5. 创建一个新的文件夹,用于存储生成的可执行文件。 6. 在命令行中输入以下命令来配置编译过程: ```shell cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/path/to/qcad_executable_directory . ``` 这将使用Unix Makefiles生成器配置构建过程,并指定编译后的文件存储路径。 7. 一旦配置完成,使用以下命令进行编译: ```shell make ``` 这将开始编译源码,并生成可执行文件。编译时间可能会有所不同,具体取决于您的计算机性能和源码规模。 8. 编译完成后,在指定的保存路径下应该会生成一个名为qcad.exe的可执行文件。 如果在编译过程中出现错误或警告,请检查您的环境设置和依赖项,可能需要解决一些缺失的或依赖关系。同时,确保按照官方文档提供的编译指南进行操作。 ### 回答3QCAD源码编译生成的可执行文件qcad.exe可能没有成功生成的原因有以下几点: 1. 编译过程中出现错误:在编译源码的过程中,可能会因为各种原因导致编译错误,比如缺少依赖编译选项设置错误等。这些错误会中断编译过程,导致最终的可执行文件没有生成。需要仔细检查编译日志或错误信息,解决相关编译错误。 2. 缺少构建环境:在编译QCAD源码之前,需要确定是否已经安装了编译所需的构建环境和工具链。这包括编译器、构建系统(如CMake)、相关依赖等。如果缺少必要的构建环境编译过程将无法进行或无法正确完成,因此不会生成可执行文件。 3. 编译选项未正确设置:编译过程中需要设置相应的编译选项,以配置编译器、链接选项和依赖等。如果编译选项设置不正确,可能导致编译过程中的错误或生成的可执行文件出错。需要确认编译选项的设置是否正确。 4. 缺少构建目标:在进行源码编译时,需要指定正确的编译目标。如果没有正确指定目标,编译系统将无法找到生成可执行文件的相关源码文件,并最终没有生成qcad.exe。 针对这些可能的原因,我们需要逐个排查和解决。通过仔细检查编译日志、确认构建环境和工具链的安装情况、修正编译选项以及检查是否正确指定了构建目标,可以解决未生成qcad.exe的问题。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值