多环境随意切换工具软件 PyMake v7.5.5
-
开发的初衷
接触Qt开发的时候在做嵌入式,通常会编译两套程序,一套桌面的,一套嵌入式的。开始的时候也没有什么难过,Qt Creator都把环境配置好了,编译就行了。后来,我开发了一套库LibQQt,给应用程序提供通用框架。当我要编译Windows桌面、Android手机、Android模拟器,Linux桌面、嵌入式Linux,macOS桌面、iOS模拟器,等等多个目标平台的时候,问题来了,我要开多个IDE进行编译,一个IDE编译多个库的时候就需要等待。痛苦不堪。
Qt强大的跨平台能力,一个IDE窗口无法发挥他的全部能力。
怎么办呢?我去寻找了多个工程管理工具,cmake、scoins、xmake,他们和qmake一样,甚至还比不上qmake,都需要配置复杂的环境然后开启编译。
自己开发一个吧。定立了程序目标,能够配置多个环境,可以应对多个环境的并行编译。开发程序的过程
说起来容易,可实施起来,还是蛮费劲的,我从2017年9月决定开发这款工具,一直开发到现在,2019年4月。历时一年半还多,已经开发到第七代,才良好的达到了我的目标。
先说第一代,先把cmake支持起来,因为cmake的环境配置最简单,我决定使用pymake.json作为保存环境的文件。文件里加入几个list,分别存储path,env变量,命令。第一代只能维持一次编译,只能保存一个环境。可是,已经保存了一个环境不是吗。千里之行始于足下,已经开始了!
使用着第一代产品,然后开发第二代,路途还遥远。我升级了保存命令的部分代码,先能运行多个命令再说。在开发的一开始我就使用了${}引用变量。
可能是太过于追求简化命令了,第三代,我重新设计了保存环境的数据结构,使用起environ字段,继续加大简化命令,结果导致命令简化到只有一个个单词在那里,多步命令,多步单词,谁都看不明白命令组里到底保存了什么。
我直接跳过了第四代,开发第五代。^^
第五代沿用了第三代的设计,在数据结构上继续强化对${}变量引用符的使用。可是我纠结于到底是把path+放在environ的外边还是里边,所以第五代我做起了测试,先把path+放在environ字段的外边。数据结构达到了空前的复杂,我写代码写到了飘忽,这可是用python开发啊,竟然解析数据结构解析到飘忽。需要配置的字段太多了,没有人能记得住需要配置哪些字段。
我急忙开始开发第六代,仔细设计了保存环境的数据结构。我保留path-assemblage字段、environ字段、command字段,我正式把path+字段移动进了environ里,并且属于确定的某一个环境,每个环境都有自己的path+字段,并且environ字段里有current字段,表示默认使用的环境。我规范了对${}的使用,只能从下往上顺序解开。command字段里也开始保存命令组,每组命令由多步命令组成,可以存很多组这样的命令。
第六代还是比较满意的,我2018年使用了一年,效果不错。我可以在确定而且独立的环境下,在确定的位置执行我的bat或者sh脚本;我可以在bat里导出我保存的环境,影响当前的bat脚本的环境,这大大简化了bat里对环境的设置和清理工作。但是第六代还是存在不足,功能比较少。
最近两个月我深度的优化了代码,开始开发第七代,增加了很多使用很充分的功能。以下仔细介绍。开发成果
讲讲第七代的强大功能吧,他能够在独立的环境里执行PyMake保存的命令和系统命令,可以临时的使用某个保存的环境执行命令,也可以在bat、sh文件当中导出保存的环境进行使用,还可以在当前的命令行里使用pyenv、pyvc、pycmd使用保存的环境和命令!太强大了。
哦,程序的名字叫PyMake,命令行里使用pymake、pymm、mm等别名,我使用install脚本进行安装。
PyMake天生就是跨平台的,使用Python进行开发,不依赖第三方包,只使用默认包!安装即可使用,卸载即可无效!
回想读大学的时候,随意向系统Path里添加路径的历史吧,回想2017年希望配置复杂、多变的环境而看着命令行束手无策的感受吧。
现在好了,复杂的环境、多变的环境,都能胜任了。我把环境保存起来了!随时启用!介绍下PyMake的提供的命令和脚本。 先说说脚本,PyMake7提供了mm、pymm、pymake、pyenv、pyvc、pycmd、pyinfo等程序分别提供不同的具体的功能,install.bat即可全部安装,unstall.bat即可卸载干净。在Unix平台上,安装器和卸载器后缀名为.sh。 再说说命令,pymake是主程序,所有的重要的环境配置命令都由他提供。 现在根据脚本不同分别进行介绍,用户安装后可以使用全部bat或者sh,稍微注意下Unix下,使用风格和Windows有点区别。 使用之前,请执行一下,观察下命令行,随后需要编辑下自己的环境,或者从我提供的环境里port出自己的环境,配置一次环境,以后就光使用。 pymake: source命令:切换环境文件的目录,切换环境文件。一般一个操作系统使用一个环境文件,.json后缀的文件,在我提供的example里面有很多.json环境文件,用户可以仿照配置自己的环境,port命令可以导出很具体的环境哦,这一个环境文件,保存了很多环境,互相冲突或者兼容,都知道的,多目标编译的时候,需要使用不同的环境,环境之间是冲突的。 set命令:在设定完成环境文件后,使用set命令进行具体的设置,包括设置path、env内容、command内容。一般我会记事本2编辑.json文件,那样更方便,当然set命令也很方便。set current env非常方便。 list/show命令:查看path、env、cmd的配置,非常beautiful。环境多的记不清了就list以下。 env命令:和上边的命令一样的性质,只是查看env的具体配置。我特别喜欢这个命令,我最关注这个命令。别名environ see命令:查看用户保存的命令集。有cmd、ss两个别名。 clean命令:pymake执行用户程序时会生成*_effect.bat/*_unset.bat/*_exec.bat,临时生成,如果用户程序执行崩溃,这些bat就会留下,clean命令可以准确的清理他们。pymakev8我会把这些bat移动到确定的目录下,pymake7这些bat跟随用户环境文件目录移动。 here命令:pymake执行用户程序会在默认执行目录下执行,这个目录可以用get default exec root命令获取到,here命令则迫使pymake在当前目录下执行用户程序。pymake的很多命令都支持here参数。别名hh。 export命令:将用户保存的env,依照环境名导出。不是环境文件哦,里边有好多环境,他们各有各的名字,pymake能够找到他们依照名字导出给用户使用。 type命令:将用户保存的cmd,依照命令名导出。pymake可以帮助用户保存一些命令,命令组,各有名字,可以按照名字导出给用户使用。 exec命令:执行用户输入的命令。别名cc。包括pymake保存的,包括系统的,都可以执行,只要当前环境里找得到的,都可以执行。 use命令:以上几个命令都是在current环境下执行的,也就是pymake里保存的用户默认环境。use命令促使pymake在用户指定的保存的环境下工作。这个用途很广泛,可以使用某个环境导出env、cmd,可以使用某个环境查看环境文件内的各项数据。 have/has命令:查看环境文件中是否存在某个配置,path、env、cmd等都可以查看,返回True或者False。 get命令:包含获取当前env,即默认env;获取默认执行目录;获取所有信息,包括环境文件所在、程序所在、程序INI所在,source/program可以获取到具体的值,返回字串。 initialize:用户进行了某些非法操作,pymake没处理上,initialize即可。initialize会把用户环境目录重置到默认位置。然后用户继续设置到自己的环境文件目录即可。 port/translate命令:这是个重要的命令。用户自己有一些环境,别人有一些环境,用户和别人之间希望互相使用下环境,可是用户不愿意直接使用,而且路径还有一点分歧。env的配置是可以通用的,也有特用的。用户可以使用port/translate这一对命令在自己和别人的环境文件之间进行数据传输。包括传输path、传输env、传输cmd。可以具体到传输某个项。这是一个很beautiful的命令,显示很美观、直观,使用对比视图。 -h,--version:默认命令。 pymm,mm:这两个脚本是pymake的别名脚本,用户安装后也可以使用这两个命令调用以上命令。 pyenv: open/close命令:用户使用pyenv有非常大的好处,他可以在当前执行器下,使用pymake保存的环境影响当前执行器的环境。并且可以开启、可以关闭。 pyvc: open/close命令:这个命令和上边那个是一样的,可是,这个可以启动vc环境,而且用户可以设定使用哪个vc环境,使用什么目标都可以轻易设置,已经被用户保存起来了! pycmd: 这个脚本,是对pyenv命令的封装,他允许在当前执行器环境里,使用用户指定或者默认的环境执行用户保存的或者系统的命令,并且影响当前环境。 pyinfo: 这个脚本还在开发之中,为用户提供丰富的PC信息等。 这几个脚本的目标是把pymake保存的环境、命令,应用于当前执行器。 历时1-2年,如此之久,开发出这样的多环境配置器,随意切换环境,实在是了不起的建筑,我自己都觉得自己了不起。^^ 说了这么多命令和脚本,看看PyMake的庐山真面目。
程序截图
命令行: R:\Develop\b0-toolkits\a0-compiler\PyMake\test>mm Usage: pymake7.py source pymake7.py source file [ <source-path-file> ] pymake7.py source root [ <source-root-path> ] pymake7.py source config [ --add ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py source config [ --del ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py source config [ --mod ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py source config [ --switch ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py source config [ --restore ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py source config [ --show ] [ <config-file-name> ] [<new-config-file-name>] pymake7.py ------------------------------------------------------------- pymake7.py set path ( --add | --del | --mod ) <name> [ <value> ] pymake7.py set env [ path ] ( --add | --del | --mod ) <group> <name> [ <value> ] pymake7.py set cmd (--add | --del | --mod ) <name> [ <values> ... ] pymake7.py set cur env <name> pymake7.py list [ path | env | cmd ] [<name>] [-r | --raw] [-a | --all] pymake7.py env [<name>] [-p | --path] [-v | --var] [-r | --raw] [-a | --all] pymake7.py ------------------------------------------------------------- pymake7.py here clean pymake7.py here export [ <env-name> ] [ to <file-name> ] pymake7.py here type [ <cmd-name> ] [ to <file-name> ] pymake7.py here use <env-name> exec [ <command-names> ... ] pymake7.py here exec [ <command-names> ... ] pymake7.py here use <env-name> cc [ <command-names> ... ] pymake7.py here cc [ <command-names> ... ] pymake7.py ------------------------------------------------------------- pymake7.py clean [ here | hh ] pymake7.py export [ here | hh ] [ <env-name> ] [ to <file-name> ] pymake7.py type [ here | hh ] [ <cmd-name> ] [ to <file-name> ] pymake7.py exec [ here | hh ] [ <command-names> ... ] pymake7.py cc [ here | hh ] [ <command-names> ... ] pymake7.py use <env-name> type [ here | hh ] [ <cmd-name> ] [ to <file-name> ] pymake7.py use <env-name> exec [ here | hh ] [ <command-names> ... ] pymake7.py use <env-name> cc [ here | hh ] [ <command-names> ... ] pymake7.py ------------------------------------------------------------- pymake7.py set current env <name> pymake7.py set default env <name> pymake7.py show [ path | env | cmd ] [<name>] [-r | --raw] [-a | --all] pymake7.py environ [<name>] [-p | --path] [-v | --var] [-r | --raw] [-a | --all] pymake7.py see [ <cmd-name> ] [ use <env-name> ] [-r | --raw] [-a | --all] pymake7.py ss [ <cmd-name> ] [ use <env-name> ] [-r | --raw] [-a | --all] pymake7.py cmd [ <cmd-name> ] [ use <env-name> ] [-r | --raw] [-a | --all] pymake7.py use <env-name> see [ <cmd-name> ] [-r | --raw] [-a | --all] pymake7.py use <env-name> ss [ <cmd-name> ] [-r | --raw] [-a | --all] pymake7.py use <env-name> cmd [ <cmd-name> ] [-r | --raw] [-a | --all] pymake7.py ------------------------------------------------------------- pymake7.py hh clean pymake7.py hh export [ <env-name> ] [ to <file-name> ] pymake7.py hh type [ <cmd-name> ] [ to <file-name> ] pymake7.py hh use <env-name> exec [ <command-names> ... ] pymake7.py hh exec [ <command-names> ... ] pymake7.py hh use <env-name> cc [ <command-names> ... ] pymake7.py hh cc [ <command-names> ... ] pymake7.py ------------------------------------------------------------- pymake7.py have path <name> [-r | --raw] pymake7.py have env [ path ] [ <group> ] [ <name> ] [-r | --raw] pymake7.py have cmd <name> [-r | --raw] pymake7.py has path <name> [-r | --raw] pymake7.py has env [ path ] [ <group> ] [ <name> ] [-r | --raw] pymake7.py has cmd <name> [-r | --raw] pymake7.py ------------------------------------------------------------- pymake7.py get cur env pymake7.py get current env pymake7.py get default env pymake7.py get env pymake7.py get env ( cur | current | default ) pymake7.py ------------------------------------------------------------- pymake7.py program pymake7.py program root pymake7.py program file pymake7.py program configure pymake7.py program configure root pymake7.py program configure file pymake7.py get all pymake7.py get all ( info | information ) pymake7.py get all ( stat | status ) pymake7.py get default exec root pymake7.py get exec root [ default | here ] pymake7.py initialize pymake7.py ------------------------------------------------------------- pymake7.py port pymake7.py port root [ <source-config-root> ] [ to <target-config-root> ] pymake7.py port config [ <source-config-file> ] [ to <target-config-file> ] pymake7.py port file [ <source-path-file> ] [ to <target-path-file> ] pymake7.py port reset pymake7.py translate pymake7.py translate ( path | env | cmd ) pymake7.py translate ( path | env | cmd ) <key-name> [ to <target-key-name> ] [ -f | --force ] pymake7.py translate ( path | env | cmd ) [ -a | --all ] [ -f | --force ] pymake7.py translate all [ -a | --all ] [ -f | --force ] pymake7.py translate section pymake7.py translate section <section-name> [ to <target-section-name> ] [ -f | --force ] pymake7.py translate section [ -a | --all ] [ -f | --force ] pymake7.py ------------------------------------------------------------- pymake7.py (-h | --help) pymake7.py --version R:\Develop\b0-toolkits\a0-compiler\PyMake\test> 命令部1: R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm initialize SOURCE : R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json SOURCE ROOT : R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource SOURCE CONFIG : pymake.json successed R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm get all CURRENT ENVIRON macOS SOURCE : R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json SOURCE ROOT : R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource SOURCE CONFIG : pymake.json ----------------------------------------- PROGRAM : R:\Develop\b0-toolkits\a0-compiler\PyMake\pymake7.py PROGRAM ROOT : R:\Develop\b0-toolkits\a0-compiler\PyMake PROGRAM FILE : pymake7.py ----------------------------------------- CONFIGURE : C:\Users\Administrator\.pymake\pymake.ini CONFIGURE ROOT: C:\Users\Administrator\.pymake CONFIGURE FILE: pymake.ini R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm get all status EXECUTE ROOT [HERE ]: R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource EXECUTE ROOT [DEFAULT]: R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm get default env macOS R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm get default exec root R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm program R:\Develop\b0-toolkits\a0-compiler\PyMake\pymake7.py R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm source R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource> 命令部2:在命令行里显示的比较整齐 R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm show macOS android.mobile android.x86 iOS iOSSimulator qt4 R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm env macOS android.mobile android.x86 iOS iOSSimulator qt4 R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm env qt5 please ensure the environ is right R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm env macOS env macOS path+: ${cmake.bin} ${qt5.9.clang.bin} variable: QTVERSION ${qt5.9.version} QTDIR ${qt5.9.clang} QTSPEC -spec macx-clang QTCONFIG CONFIG+=x86_64 QKIT macOS QSYS macOS R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm env macOS -r env macOS path+: /Users/abel/Develop/b0-toolskits/a0-compiler/CMake.app/Contents/bin /Users/abel/Develop/b0-toolskits/macLibraries/Qt/5.9.2/clang_64/bin variable: QTVERSION 5.9.2 QTDIR /Users/abel/Develop/b0-toolskits/macLibraries/Qt/5.9.2/clang_64 QTSPEC -spec macx-clang QTCONFIG CONFIG+=x86_64 QKIT macOS QSYS macOS R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm env macOS -r -a env macOS path+: /Users/abel/Develop/b0-toolskits/a0-compiler/CMake.app/Contents/bin /Users/abel/Develop/b0-toolskits/macLibraries/Qt/5.9.2/clang_64/bin R:/Develop/b0-toolkits/winLibraries/Qt/5.9.2/mingw53_32/bin R:/Develop/b0-toolkits/winLibraries/Qt/Tools/mingw530_32/bin R:/Develop/b0-toolkits/winCompilers/cmake3.9.1_64/bin R:/Develop/e0-tools/doxygen/graphviz-2.38/bin R:/Develop/e0-tools/doxygen/bin R:/Develop/b0-toolkits/winLibraries/Qt/5.9.2/mingw53_32/bin R:/Develop/b0-toolkits/winLibraries/Qt/Tools/mingw530_32/bin R:/Develop/b0-toolkits/winCompilers/cmake3.9.1_64/bin R:/Develop/e0-tools/doxygen/graphviz-2.38/bin R:/Develop/e0-tools/doxygen/bin C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\Wbem C:\WINDOWS\System32\WindowsPowerShell\v1.0\ C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common C:\Program Files\TortoiseGit\bin C:\WINDOWS\system32 C:\WINDOWS C:\WINDOWS\System32\Wbem C:\WINDOWS\System32\WindowsPowerShell\v1.0\ C:\WINDOWS\System32\OpenSSH\ C:\Program Files\Microsoft Network Monitor 3\ D:\HsuHelper\TZWebPdf D:\HsuHelper\TZKey R:\Develop\e0-tools\doxygen\bin C:\Program Files\Git\cmd C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Scripts\ C:\Users\Administrator\AppData\Local\Programs\Python\Python36\ C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps variable: QTVERSION 5.9.2 QTDIR /Users/abel/Develop/b0-toolskits/macLibraries/Qt/5.9.2/clang_64 QTSPEC -spec macx-clang QTCONFIG CONFIG+=x86_64 QKIT macOS QSYS macOS ALLUSERSPROFILE C:\ProgramData APPDATA C:\Users\Administrator\AppData\Roaming COMMONPROGRAMFILES C:\Program Files\Common Files COMMONPROGRAMFILES(X86) C:\Program Files (x86)\Common Files COMMONPROGRAMW6432 C:\Program Files\Common Files COMPUTERNAME SC-201803271727 COMSPEC C:\WINDOWS\system32\cmd.exe DRIVERDATA C:\Windows\System32\Drivers\DriverData FILEPATH R:\Develop\b0-toolkits\a0-compiler\PyMake\ FPS_BROWSER_APP_PROFILE_STRING Internet Explorer FPS_BROWSER_USER_PROFILE_STRING Default HOMEDRIVE C: HOMEPATH \Users\Administrator LOCALAPPDATA C:\Users\Administrator\AppData\Local LOGONSERVER \\SC-201803271727 NUMBER_OF_PROCESSORS 20 ONEDRIVE C:\Users\Administrator\OneDrive OS Windows_NT PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC PROCESSOR_ARCHITECTURE AMD64 PROCESSOR_IDENTIFIER Intel64 Family 6 Model 62 Stepping 4, GenuineIntel PROCESSOR_LEVEL 6 PROCESSOR_REVISION 3e04 PROGRAMDATA C:\ProgramData PROGRAMFILES C:\Program Files PROGRAMFILES(X86) C:\Program Files (x86) PROGRAMW6432 C:\Program Files PROMPT $P$G PSMODULEPATH C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules PUBLIC C:\Users\Public PYENVEXISTEDFLAG True PYENVFLAG True PYENVINDEX 15870 PYENVNAME qt5 PYMMDEFAULTENVNAME qt5 PYMMSHELLROOT R:\Develop\b0-toolkits\a0-compiler\PyMake\example PYMMSOURCECONFIG pymake7-win-tai.json PYMMSOURCEROOT R:\Develop\b0-toolkits\a0-compiler\PyMake\example PYPROGRAMNAME pymake.bat PYPROGRAMPATH R:\Develop\b0-toolkits\a0-compiler\PyMake\ PYPROGRAMPATHNAME R:\Develop\b0-toolkits\a0-compiler\PyMake\pymake.bat QKIT WIN32 QSYS Windows QTDIR R:/Develop/b0-toolkits/winLibraries/Qt/5.9.2/mingw53_32 QTSPEC -spec win32-g++ QTVERSION 5.9.2 SESSIONNAME Console SYSTEMDRIVE C: SYSTEMROOT C:\WINDOWS TEMP C:\Users\ADMINI~1\AppData\Local\Temp TMP C:\Users\ADMINI~1\AppData\Local\Temp USERDOMAIN SC-201803271727 USERDOMAIN_ROAMINGPROFILE SC-201803271727 USERNAME Administrator USERPROFILE C:\Users\Administrator WINDIR C:\WINDOWS R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource> 命令部3: R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm port port: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json port: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource port: source config is pymake.json port: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json port: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource port: target config is temp-target.json R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm translate translate: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json translate: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: source config is pymake.json translate: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json translate: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: target config is temp-target.json --------------------------------------------------------------------- [source] pymake.json [target] temp-target.json [status] all sections: path-assemblage path-assemblage [NORMAL] environ environ [NORMAL] command command [NORMAL] variable-assemblage Tips [NORMAL] command-assemblage [EMPTY] 1 [NORMAL] R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm translate cmd translate: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json translate: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: source config is pymake.json translate: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json translate: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: target config is temp-target.json --------------------------------------------------------------------- [source] pymake.json [target] temp-target.json [status] command: test [EMPTY] 1 [NORMAL] qqt.build [EMPTY] 2 [NORMAL] qqt.clean [EMPTY] 3 [NORMAL] Qt [EMPTY] 4 [NORMAL] cmake [EMPTY] 5 [NORMAL] prod [EMPTY] 6 [NORMAL] libtool [EMPTY] 7 [NORMAL] Qt.check [EMPTY] 8 [NORMAL] Qt4.build [EMPTY] 9 [NORMAL] Qt4.8.7.build [EMPTY] 10 [NORMAL] QtSoap.build [EMPTY] 11 [NORMAL] qqt.push [EMPTY] 12 [NORMAL] qqt.pull [EMPTY] 13 [NORMAL] qqt.cloc [EMPTY] 14 [NORMAL] android.sdk [EMPTY] 15 [NORMAL] R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm translate cmd -a translate: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json translate: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: source config is pymake.json translate: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json translate: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: target config is temp-target.json --------------------------------------------------------------------- [source] pymake.json [target] temp-target.json [status] command: test test [SUCCESS][ ] qqt.build qqt.build [SUCCESS][ ] qqt.clean qqt.clean [SUCCESS][ ] Qt Qt [SUCCESS][ ] cmake cmake [SUCCESS][ ] prod prod [SUCCESS][ ] libtool libtool [SUCCESS][ ] Qt.check Qt.check [SUCCESS][ ] Qt4.build Qt4.build [SUCCESS][ ] Qt4.8.7.build Qt4.8.7.build [SUCCESS][ ] QtSoap.build QtSoap.build [SUCCESS][ ] qqt.push qqt.push [SUCCESS][ ] qqt.pull qqt.pull [SUCCESS][ ] qqt.cloc qqt.cloc [SUCCESS][ ] android.sdk android.sdk [SUCCESS][ ] R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm translate cmd -a translate: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json translate: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: source config is pymake.json translate: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json translate: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: target config is temp-target.json --------------------------------------------------------------------- [source] pymake.json [target] temp-target.json [status] command: test test [CANCEL ][EXISTED] qqt.build qqt.build [CANCEL ][EXISTED] qqt.clean qqt.clean [CANCEL ][EXISTED] Qt Qt [CANCEL ][EXISTED] cmake cmake [CANCEL ][EXISTED] prod prod [CANCEL ][EXISTED] libtool libtool [CANCEL ][EXISTED] Qt.check Qt.check [CANCEL ][EXISTED] Qt4.build Qt4.build [CANCEL ][EXISTED] Qt4.8.7.build Qt4.8.7.build [CANCEL ][EXISTED] QtSoap.build QtSoap.build [CANCEL ][EXISTED] qqt.push qqt.push [CANCEL ][EXISTED] qqt.pull qqt.pull [CANCEL ][EXISTED] qqt.cloc qqt.cloc [CANCEL ][EXISTED] android.sdk android.sdk [CANCEL ][EXISTED] R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>mm translate cmd -a -f translate: source file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\pymake.json translate: source root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: source config is pymake.json translate: target file is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource\temp-target.json translate: target root is R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource translate: target config is temp-target.json --------------------------------------------------------------------- [source] pymake.json [target] temp-target.json [status] command: test test [SUCCESS][EXISTED][FORCE] qqt.build qqt.build [SUCCESS][EXISTED][FORCE] qqt.clean qqt.clean [SUCCESS][EXISTED][FORCE] Qt Qt [SUCCESS][EXISTED][FORCE] cmake cmake [SUCCESS][EXISTED][FORCE] prod prod [SUCCESS][EXISTED][FORCE] libtool libtool [SUCCESS][EXISTED][FORCE] Qt.check Qt.check [SUCCESS][EXISTED][FORCE] Qt4.build Qt4.build [SUCCESS][EXISTED][FORCE] Qt4.8.7.build Qt4.8.7.build [SUCCESS][EXISTED][FORCE] QtSoap.build QtSoap.build [SUCCESS][EXISTED][FORCE] qqt.push qqt.push [SUCCESS][EXISTED][FORCE] qqt.pull qqt.pull [SUCCESS][EXISTED][FORCE] qqt.cloc qqt.cloc [SUCCESS][EXISTED][FORCE] android.sdk android.sdk [SUCCESS][EXISTED][FORCE] R:\Develop\b0-toolkits\a0-compiler\PyMake\UserSource>
好了就这些吧,希望各位搞Qt的同事,Enjoy it。
Multi-environ Manager Project gitee Link
Multi-environ Manager Project gitee Link (Mobile)