-
-
Notifications
You must be signed in to change notification settings - Fork 851
linux平台使用set_pcxxheader 自動產生的 .gch 和 .gch.d 路徑有問題 #301
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
Comments
如果是clang, 生成的pch目前就是隔离到build目录下的,而gcc的预编译生成 gch,目前我没研究出来指定到其他目录生成,这也是没办法的行为,要支持gcc的预编译,只能在当前源码下生成对应的*.gch,才能正常工作。 如果你能找到gcc预编译可以指定生成到其他目录的方法,我很乐意去修改下生成路径的。 |
我在cmake中使用 ADD_CUSTOM_COMMAND 下指令,可以指定路徑。
你試試看 |
能否提供下编译时候的完整命令行? |
概念是這樣,使用cmake蒐集其他cpp正常編譯過程需要的所有旗標,然後產生 gch 檔案。
因為 cmake 的 ADD_CUSTOM_COMMAND 可以建立出一個 target ,所以必要時可以明確的指定重新編譯這個target ,達到強制刷新 pch 的目的,挺方便的。 我實際開了 ubuntu 執行 cmake 腳本,然後把完整命令行萃取出來:
|
这块我有点忘记了,刚没说清楚,生成gch是可以指定路径的,应该是之前因为在编译源码指定使用某个pch/gch文件的时候,clang可以通过 -include-pch xxxx.pch来指定特定目录的pch文件来使用 ccache xcrun -sdk macosx clang -c -include src/header.h -include-pch build/header.h.pch -o xxx.o xxxx.c 而gcc没这个参数,没法指定使用其他目录下xxx.gch文件,只能生成到xxx.h对应的当前目录下xxx.h.gch,编译源码的时候才会自动找到使用。 所以即使gcc编译生成gch到指定其他目录,但是编译.c的时候,没法通过-include-pch xxx.gch 指定使用其他目录下的gch文件,所以没找到好的解决办法,就直接生成到当前目录下了。。 你可以看看cmake有没有好的处理方式,如果可以的话,可以贴下对应的完整命令行给我参考下。。 |
暫時查到 cmake 的 pch 做法,都是直接套用 gcc -include XXX 然後用 -Winvalid-pch 驗證。而不直接使用 ccache。。。 另外一個選擇就是使用 before_build 事件,把預編譯頭複製到 build 路徑裡,然後就地產生gch,最後在正常編譯期間使用放在 build 裡的私有檔案。。。 |
这个跟ccache没啥关系,不用你可以禁用掉,如果只有-include xxx.h 怎么指定使用 其他目录下的*.gch文件呢?clang有 -include-pch xxx.pch可以独立指定 |
ccache 暫且不熟,有了些誤會,抱歉。 |
目前就是在before build阶段预生成的,这跟此issues没啥直接关系。
这样的话,生成gch的时候,还需要将使用的headers copy到build对应目录下,这种方式可以尝试下,但不知道是否有其他坑,可以先试试 |
这块我改进过了,你试试吧,请更新下dev分支代码,目前做了如下改动:
由于这次变动还是有点的,你这边可以多测下,预编译以及头文件依赖编译相关的逻辑。 |
xmake build 開啟 -w 後比以往多出一些警告,類似於:
除此之外也確認 .gch/ .gch.d 放置在build路逕了。win/mingw/ndk/linux 四個平台+多種設置,都可以編譯成功且可運行。晚些找時間再來多測試一下 macosx 和 ios 。。。 |
哦哦 ,警告这块忘记过滤了 我回头改进下 |
我改进过了,你可以更新下dev再试试, 由于目前改成 目前只能通过一些特征模式,进行过滤提取分离两者,对于警告信息,错误信息的提取,经测试gcc/clang下都ok,但是中文版本的gcc/clang我这没有,如果你这有的话,也可以测测,理论上应该也没啥问题。 |
剩下 mingw 會打印出警告:
|
好吧,看来还是过滤不全,我再改进下 = = |
可以了,你再试试,xmake update dev,windows上dev包我也更新了 |
windows/mingw/linux/android 多種設置搭配測試OK,感謝 |
The text was updated successfully, but these errors were encountered: