-
-
Notifications
You must be signed in to change notification settings - Fork 784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
quickapp_qt 模板產生出來的專案,編譯成功後,執行失敗 #257
Comments
会自动编译进来的,我这边之前测试是可以的,回头我看下 |
我试了下,直接xmake运行是可以的,没问题: $ xmake create -l c++ -t quickapp_qt qt5_app
$ cd qt5_app
$ xmake
$ xmake run qml.cpp是会正常编译进去的,运行也没问题。。 不要使用 |
開發過程中, 需要debug的時候,vs系列IDE還是挺重要的工具,我們很難在流程中放棄這個。 如此一來,建構流程中發生了兩個問題:
舉個例子來說,我們開發過程 ps4/xbox1/pc 都必須使用到 vs2015/2017格式的sln專案檔,檔案結構其實90%內容相同,僅僅多了些額外選項可以設定;這在以往用cmake的時候,設定完編譯過程後,可以按照需要在command 和 IDE project 兩者間切換,但最終編譯結果是一樣的。 xmake是一個潛力巨大,擴充能力強大的工具,對於已經在使用lua的人來說其實具備非常大的吸引力,期望未來能更加完善 :D |
并没有放弃,只是目前xmake重点在xmake command运行为主,所以很多新特性会优先实现,但是IDE工程文件生成,毕竟依赖于第三方IDE的支持力度,很多新特性(像rules,after_xxx)要加到vcproj文件中去,会比较麻烦些 虽然也有解决办法是实现支持,但是个人时间精力有限,所以如果用户需求不强烈,我一般不会重点考虑立马支持上,还是以command模式为主,如果你有这需要,可以提issues特性请求,我会考虑排期实现,但是进度上把控,需要根据我的实际时间来安排了,可能需要等上一段时间 当然,如果用户能够帮忙贡献相关代码的话,我也是非常乐意的,这也是为什么做成了plugin方式提供出来的原因,隔离核心代码,方便维护和扩展。
同上说明,只是暂时部分特性还不支持,cmake主推IDE生成,所以模式上是有差异的,但是cmake这种方式太过依赖第三方IDE支持力度,这样加新特性会很被动,也很受限制,比如on_install这种,即使也支持,但是不同IDE/makefile下,对用户的操作处理方式都是不一致的。。
这个我上面也说了,以plugin方式提供,方便扩展,也方便贡献者参与进来帮忙贡献,与command保持一致,需要做更多的工作,因为受限于不同IDE的支持力度,所以隔离plugin/command 更有好处,这样command至少极大的提供了xmake的灵活性,一致性,新特性的快速支持。。 虽然IDE生成plugin部分功能受限制,但如果只要花时间,用户有需求,之后也会考虑支持上的,但毕竟不是xmake的重点,个人时间精力有限,所以会有些滞后,不会及时同步支持,这个也请谅解。。 |
如果你确实急需同步支持这些,请耐心等待一段时间,后续版本如果有时间,会尽量想办法支持上去的。。 |
關於before_build和after_build,能分享一下你傾向的實作方法嗎? |
这块我还没仔细考虑,初步想法是 通过在vcproj里面对应阶段添加custom command 去执行类似 xmake l target.before_build xxx的命令去加载运行它们。。 理论上对于 before_build和after_build 以及qt的这种自定义rules里面的on_build_file 应该都可以这么搞。。 而且这种方式对于makefile,以及其他工程文件格式,支持上更加友好通用些 后期等实现的时候 ,我会更深入的研究下。。 |
我会在2.2.3版本支持上 |
近期打算先发个版本,当前版本主要还是以改进包管理为主,这个特性改进需要花点时间,因此考虑挪到下个版本实现,请耐心等待。。 |
v2.2.4版本增加和改进的特性太多了,暂时没时间支持这个,暂定到v2.2.5版本去支持,请谅解。 |
我觉得生成那样的 文件纯属用力过猛 下面这个绝对表现和XMake完全一致 <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="debug|x86">
<Configuration>debug</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release|x86">
<Configuration>release</Configuration>
<Platform>x86</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="debug|x64">
<Configuration>debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="release|x64">
<Configuration>release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>16.0</VCProjectVersion>
<ProjectGuid>{4C89F191-E698-402F-B838-5275FE40C3F1}</ProjectGuid>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
<OutDir>$(ProjectDir)build\windows\$(Platform)\$(Configuration)</OutDir>
<TargetName>main</TargetName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Include="m.cpp" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="Configure">
<Message Text="Configure: mode=$(Configuration), arch=$(Platform)" />
<Exec Command="xmake f -m $(Configuration.ToLower()) -a $(Platform.ToLower())" ConsoleToMsBuild="true" ConsoleOutput="$(XmakeBuildOutput)" />
<Message Text="$(XmakeBuildOutput)" />
</Target>
<Target Name="Build">
<Message Text="Build" />
<CallTarget Targets="Configure"/>
<Exec Command="xmake build" ConsoleToMsBuild="true" ConsoleOutput="$(XmakeBuildOutput)" />
<Message Text="$(XmakeBuildOutput)" />
</Target>
<Target Name="Rebuild">
<Message Text="Rebuild" />
<CallTarget Targets="Configure"/>
<Exec Command="xmake build -r" ConsoleToMsBuild="true" ConsoleOutput="$(XmakeBuildOutput)" />
<Message Text="$(XmakeBuildOutput)" />
</Target>
</Project> C:\Users\lzy\Documents\Source\test\Project1> tree /f
文件夹 PATH 列表
卷序列号为 0439-29D1
C:.
.gitignore
m.cpp
Project1.sln
Project1.vcxproj
xmake.lua
没有子文件夹 |
? 把整个源文件树丢丢掉,直接wrap处理? 现在这边遇到需要生成vcproj的用户需求,主要都是用来通过生成vcproj编译,方便断点调试的,以及vs的源码分析提示。。还有些用户需要 在vs里面尝试临时修改一些 flags的都有。。 这么搞法,怎么支持vs的调试功能呢,还有源码分析也失效了。 |
而且你在vs里选择清理会运行 这个是不是删了比较好? |
我建议还是保留使用者各自的.user,这个不 add 到git里面,只在每个人本地维护呢? |
這也是個問題,行為模式和vs原生的不一樣容易讓人搞混,我現在都先暫時避開不使用清理了,真的需要就直接重跑建構腳本,乾淨的刪除整個目錄重建一個。 |
就方便使用的角度來說,當然是會希望運行完建構腳本,就直接到目錄內開啟 .sln 工作。 |
@OpportunityLiu 那只能在xmake project -k vsxmake执行生成前,先取出当前config缓存中,除plat/arch/mode以外的所有配置,预先写入.user中了。 |
若vsxmake 能維持著和運行 xmake config -> xmake build 一致的結果,是最好的了。 |
目前xmake config配置并不是增量配置的,每次都是全量配置,最后一次config都会覆盖之前的config 因为增量配置,处理起来过于复杂,还要考虑局部配置的依赖同步更新,也更容易导致各种bug 不好维护。。 所以现在每次config必须要敲全所有配置参数才行,常用配置可以放置在 xmake g的全局配置里面来简化 而vsxmake每次build都会去对当前选择的arch/mode进行config切换,这就会覆盖最初的命令行下的xmake config。。所以只有写入.user,在每次build config的时候,重新附带上.user里面这些附带的config才行 |
用 Jenkins CI 做測試編譯的時候,它可以正確配置全局環境變數使之正常使用,但是 xmake global 的全局配置貌似會直接寫入檔案中,有機會影響到其他準備要編譯的項目。 |
所以要么只有在xmake project -k vsxmake生成vcproj的开始处,提取已经xmake config配置的参数数据,写入到.user,这有这样 才能满足你这边的需求,这块的提取可以放置在 vxxmake插件里面自动处理掉,也可以你自己写脚本 自己追加进去 |
有沒有可能讓 xmake project -k vsxmake2015 運行的時候帶入額外參數 (例如 --qt=xxx)?? 或是可以優先尋找對應的環境變數 (類似VS預設的INCLUDE這種)? |
那就要吧所有xmake config里面的参数全部在xmake project再去定义一遍,这就冗余了,也不好维护了。。 除非透传整个config字符串到 一个 xmake project -k vsxmake -f "--qt=xxx --xxx=aa --y=yyy" 不过这样里面还得做config参数解析,还不如直接从先前的config中提取出来了 |
那就这样吧
|
这样也可以 |
怎么读config? |
import("core.project.config")
config.load()
for name, value in pairs(config.options()) do
-- ...
end |
那就从config cache取原始传参,只包含用户实际的传参列表和值。 import("core.project.cache")
local configcache = cache("local.config")
for name, value in pairs(configcache:get("options_all")) do
end |
最新的dev分支上,改成 |
写错键名了。。
这里应该改成 "values.project.vsxmake.sourcedirs"
@waruqi 不想再开PR了,你直接改了吧 |
@OpportunityLiu 改了,这种小改动,直接github上,对应lua文件点 edit编辑直接改下就行了。。 |
@waruqi 、 @OpportunityLiu 非常感謝兩位幫助,使用了一段時間都沒遇到問題。 |
產生專案的指令:
無論是直接xmake或是開啟.sln,編譯成功後,執行時都會出現錯誤訊息:
後來嘗試把自動生成的
.qt\qrc\qt5_app\qml.cpp
強制加入專案一起編譯,才可以正常運作。The text was updated successfully, but these errors were encountered: