Soft_Job 板


LINE

#1a1f6YB1 (Soft_Job) [ptt.cc] Fw: [問卦] C++到底難學在哪? : 推 wizmelo: 我覺得C++一開始CMake建置環境就會勸退很多人 然後報錯 03/09 09:22 : → wizmelo: 的異常很難看懂 導入別的包使用function 也寫的很難讓人 03/09 09:22 : → wizmelo: 看懂 如果以一個沒使用過的人來說 03/09 09:22 : 推 ko27tye: 沒跨平台需求老實說make夠用了 03/09 13:19 : 推 wulouise: cmake比make簡單,但是要是不懂make有時候出問題,難查 03/10 22:57 : → superpandal: go的很不統一 import個包要全網址 03/13 17:36 : → superpandal: 原生makefile比cmake好多了 簡潔有力 03/13 17:38 : → superpandal: 而且現在一堆這樣的都很肥大cmake meson都是 03/13 17:39 : → superpandal: 裝一裝一堆沒用到的語言都裝上去 03/13 17:40 : → superpandal: 當然都可以用shell來產makefile就像 03/13 17:49 : → superpandal: cmake configure那種亂寫的除外 03/13 17:50 我非常同意CMake的報錯信息難看懂,所以我都改用meson了。 先不戰CMake和meson Makefile不是不可以跨平臺,如FFmpeg。我也不是完全反對Makefile, kernel, buildroot(openwrt),最上層用用Makefile還行。不過後者我改 OpenEmbedded了。 我們先不講跨平臺,C++一個header編譯到懷疑人生的久,不用PCH處理早晚吐血。 你試看看Makefile寫個recipe來處理。 很多人Makeilfe的link規範寫不對盤,bsd linker, gold linker, lld,最老的bsd隨便你 寫順序都能link上。後面要速度換了一個。 結果一個shared library A依賴shared library B。你構建target的時候,B寫在A的前面了, 馬上gold linker報錯。 static library不是當作object輸入的,當作一個library,結果死活有一個symbol unresolve。 還有很多肚爛的的先把objects全部都archive,然後再製造出executable或者shared library。 突然提示symbol unresolve,幾百個objects我要在長長的log中找出來哪個symbol。 為什麼compiling的時候不提示?因為header file中有這個declaration,結果symbol的 definition完全不同。 又為什麼會這樣呢?因為Makefile的cflags, cxx flags和ld flags這些傳遞都是沒有保障的, 可能莫名奇妙的被另外一個file給override了。後面的target全部死光光。 meson雖然沒有明顯區分local variable和global的,但是這些flags是可以一個target一個 設定的。CMake有個非常複雜的naming scope機制,我基本上理解到放棄。 另外就是所謂的options功能了,每次都重新編譯大項目沒幾個人受得了。而Makefile的 string解析真是爛,要call shell來又可能會造成env和本地變數衝突,語法可能有不正確的 解析。 以上都是工作中的碎碎念。實際的場景比這個更複雜 -- 你比較喜歡哪一個? 當年不是黨國大老但是被江浙財團捧紅的中國帥哥 跟同樣擁兵一方的諸侯約會裁軍結果半途諸侯們爽約,平常有在寫日記的莊嚴男人開始發飆 在旁邊讀著荒漠甘泉冷眼旁觀看著薔薇戰爭的人,為了中國的事情爭吵 別國調侃是不是中國總統,義正詞嚴的說著我是民族的燈塔的威嚴老先生 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 192.147.44.15 (美國)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Soft_Job/M.1678777673.A.15D.html
1F:推 Apache: 都用Bazel 03/14 15:40
Bazel語法沒法理解,我覺得bazel更像bitbake了。
2F:推 pacino: autoconf 很好用啊 03/14 15:50
大哥,貓王死了啊。九十年代過了
3F:推 tennyleaz: 我常常都用動態DllImport比較懶XD 03/14 16:04
Windows派是吧,多來幾個你試看看,還有你多來幾個C++ ABI
4F:推 labbat: docker 萬用解 03/14 16:18
docker只能幫你準備environment,這些不基本上不用來準備environment的 ※ 編輯: hizuki (192.147.44.15 美國), 03/14/2023 16:24:58
5F:→ labbat: 題外話,好奇你引用的那些留言串出自那篇文章呀 03/14 16:27
其實就在本版上面一點,我補上了
6F:推 timmerix: 你這些都還好, 有些公司有自己內部的make系統, 完全沒有 03/14 16:48
7F:→ timmerix: 詳細的使用說明, build報錯只能猜或自己做實驗試 03/14 16:49
有些是拿Makfile改的,那已經夠吐血了。 ※ 編輯: hizuki (192.147.44.15 美國), 03/14/2023 17:20:35
8F:→ superpandal: 這不就是專案規範的鍋 靜態的是打包所有object沒錯 03/14 17:28
9F:→ superpandal: object沒錯 用shell不是指在makefile裡用 而是如同co 03/14 17:29
10F:→ superpandal: 用 而是如同configure 但不會是如此糟糕的寫法 03/14 17:30
11F:→ superpandal: 的寫法 makefile本身就不適合動態 而shell 03/14 17:31
12F:→ superpandal: shell很動態 本身還是個web仔就是 03/14 17:32
13F:→ superpandal: 不過如果慢可以多job 或不用c++ XD 03/14 17:44
14F:推 loadingN: 確實 有維護過 舊的Makefile... 03/14 17:47
15F:推 superpandal: 上面那串是表示私下研究覺得相關的都太臃腫 03/14 17:48
16F:→ superpandal: 臃腫 cmake meson都是 03/14 17:49
17F:→ superpandal: 反正我都自己寫shell框架了 03/14 17:51
18F:→ superpandal: cmake本身都是生出makefile或在win下可能是vs專案 03/14 17:56
19F:→ superpandal: 能是vs專案 03/14 17:56
20F:→ superpandal: 躺平的web仔 但shell功力越來越出神入化了 03/14 18:02
21F:→ superpandal: 了 03/14 18:02
Web如果是Java的話,老老實實用maven gradle。我們不需要package management。 我們的環境是要用linker的,麥類比。
22F:推 Bencrie: 我寫的東西不夠大,自己刻 Makefile 還蠻好用的 03/14 19:37
23F:推 gino0717: 我都用qmake 03/14 19:40
24F:→ alongalone: 老哥 你內行的誒... 直接丟出去給別人解就好啦 03/14 23:11
25F:→ Lipraxde: 工具本身設計可能確實是會導致最終變得難用...不過也有 03/14 23:43
26F:→ Lipraxde: 蠻多時候是使用者的問題... 03/14 23:43
27F:推 zetexp: 可以用用看xmake 03/15 00:03
meson已經足夠了,xmake反而是中國式的All in One
28F:推 shomingchang: 我只會用python寫建置腳本 03/15 00:05
setuptool沒有什麼問題
29F:推 mmonkeyboyy: 看大小吧.....殺雞不用牛刀 牛刀也要磨很久啊 03/15 00:41
30F:→ superpandal: 給你倚天劍和屠龍刀你要選哪個? 都是利器 03/15 01:02
31F:→ superpandal: 器 03/15 01:02
32F:→ k798976869: 手槍:py 03/15 08:22
33F:推 chchwy: 這就是C++的問題 一大堆build tool 03/15 09:39
34F:→ chchwy: 每個人不爽就自己再幹一個 03/15 09:39
所有要構建的語言都是這樣的,這個是project的問題,和語言本身無關。
35F:→ Ekmund: go: tidy 03/15 09:44
36F:→ Ekmund: 你看看光make就可以搞成這樣有多勸退 03/15 09:44
37F:→ Ekmund: 加個自己刻的小lib 重寫makefile後跳undefined reference 03/15 10:06
38F:→ Ekmund: 光linker single-pass的特性就容易變成坑 03/15 10:06
Go聽說升級有造成memory炸掉,這種有GC的語言不是一個生態的 ※ 編輯: hizuki (192.147.44.15 美國), 03/15/2023 10:59:36
39F:→ superpandal: 不是類比 只是在說不是在公司用 03/15 17:43
40F:→ superpandal: 畢竟前面一堆講公司如何如何 03/15 17:45
41F:→ superpandal: java目前的確用那兩個 但說實話也是偏靜態的 03/15 17:46
自己硬幹沒有什麼問題,但是項目總是會擴展的,比如cross platform,這個其實算靜態
42F:→ superpandal: 態的 也都可以土法煉鋼 或自己整一個工具 03/15 17:47
43F:→ superpandal: 具 03/15 17:48
44F:→ superpandal: py是手槍? XD 03/15 17:51
45F:→ superpandal: go還是主要在抓遠端依賴 c讀本機lib 03/15 17:58
46F:→ superpandal: 然而每個系統都不同 比不了 03/15 17:59
47F:→ superpandal: 歷史因素了 但純makefile或小工具生成很簡潔 03/15 18:01
48F:→ superpandal: 不錯 03/15 18:02
舉個例子,Makefile生小工具的慘劇。某個七老八老的BSD的,好死不死 memory超過2GiB(3GiB)了,結果不知道要用mmap64(),結果死活讀不到一部分的memory了。 如果有GNU autotools的話,就會自動探測我可以用mmap64()而不是mmap() 世界總是有地雷的。 ※ 編輯: hizuki (192.147.44.15 美國), 03/15/2023 18:22:46
49F:→ superpandal: 自己的東西不會考慮非類unix 現在也有 03/15 18:43
50F:→ superpandal: wsl 03/15 18:43
看了筆記寫錯了,那次是讀register段正好在3G外 可以理解,但是真的不鼓勵 ※ 編輯: hizuki (192.147.44.15 美國), 03/15/2023 18:45:26
51F:→ superpandal: 這應該是編譯器要做的 不是專案管理工具要做的 03/15 18:45
Linux有很多32bits->64bits擴展帶來的問題,編譯器在制定的時候根本POSIX還沒定這些 據說solaris有很多這種類,要接受業界有很多設備不能更換。 ※ 編輯: hizuki (192.147.44.15 美國), 03/15/2023 18:47:55
52F:→ superpandal: 要做的 03/15 18:45
53F:→ superpandal: 還是要改編譯器 本來就很多選項不是標準 03/15 18:54
54F:→ superpandal: 給編譯器分析就很好 連專案管理都這樣搞就魔怔了 03/15 18:57
55F:→ superpandal: 就入魔了 03/15 18:57
56F:→ MTKer5566: 幸好我不再寫code了 03/15 19:15
57F:→ projectb: Qmake: 03/15 19:34
58F:推 e12518166339: 雖然我這麼覺得,但是gnu相關的lib都還是用makefile 03/15 20:27
59F:→ e12518166339: 為大宗,工作上根本躲不掉 03/15 20:27
60F:推 mmonkeyboyy: 推樓上 = =" 根本躲不掉.... 03/16 04:06
一般只有toolchains需要,這個只有bootstrap做一次。當然你要改什麼utils當我沒講
61F:→ mmonkeyboyy: 一堆HPC應用....下面也是make 手刻在那裡搞 03/16 04:07
我正好是做graphics的
62F:推 Bencrie: GNU 是老牌 autotools 系列吧 03/16 08:56
63F:→ superpandal: makefile是makefile gnu autotool和cmake是一類東 03/16 09:32
64F:→ superpandal: cmake是一類東西 03/16 09:33
65F:→ superpandal: 然後都是再自創一個dsl把簡單複雜化 03/16 09:33
66F:→ superpandal: 最終目標也都是生成makefile 03/16 09:35
67F:→ superpandal: 基本上你寫個腳本也叫cmake 針對專案文件 03/16 09:39
68F:→ superpandal: 件也做差不多的事情結果也差不多 03/16 09:40
69F:→ superpandal: 不用額外裝一堆東西是好處 03/16 09:41
70F:→ superpandal: 然後腳本也佔不了幾k容量 03/16 09:44
71F:→ superpandal: 至於純寫makefile也不是不可以 只是架構要精美 03/16 10:00
72F:→ superpandal: 要精美 03/16 10:00
73F:推 peterbrucele: 推e大 後人總是跟據前面問題開發新工具 但更多時候 03/16 15:08
74F:→ peterbrucele: 舊系統無法遷移 03/16 15:08
75F:推 ztdxqa: 驚 原來現在還有沒用Bazel的嗎?2017年入職轉到現在三個 03/16 16:39
76F:→ ztdxqa: 公司都是用Bazel 03/16 16:39
77F:→ superpandal: bazel更扯 連java都裝上了 那跑起來很恐佈 03/16 17:48
78F:→ superpandal: 佈 大機率是某個java派主導的 看了一下優點... 03/16 17:50
tensorflow是逃不掉的,語法真的很可怕。所幸lite改cmake了
79F:→ superpandal: 優點 這就... makefile都可以include 雖然動態性 03/16 17:53
80F:→ superpandal: 然動態性不是太好 但節省設定是可以的 03/16 17:54
Google就是愛推。但是Google這個渣男,Android又推go plugin(soong)來生成構建規則, 而Android app卻又是gradle那一套。
81F:→ superpandal: 再搭其它小工具如ccache就可以了 03/16 17:55
82F:→ superpandal: 即便沒有cache也是編譯有改的 03/16 17:55
83F:→ superpandal: 拿來管理java專案或許不錯 03/16 17:57
84F:推 richer6605: 推推 只知道makefile 看了文章覺得長知識 03/16 19:26
85F:→ superpandal: 這是長常識 千言萬語抵不過體驗 03/16 20:55
86F:→ superpandal: 現在看來很多工具真的意義不大 03/16 20:57
87F:→ superpandal: 繼續遵守unix原教旨 03/16 20:58
我很想把這個KISS趕走
88F:推 OnlyRD: cmake有很難用?我覺得modern cmake其實還可以。 03/17 02:11
89F:推 mmonkeyboyy: 樓上你老了 (上次我說跟你一樣的話時別人也這樣講我) 03/17 05:53
modern cmake的問題是沒有阻止舊語法,和C++一樣我弄不清究竟要怎麼寫。 而且cmake真心的慢 ※ 編輯: hizuki (192.147.44.15 美國), 03/17/2023 15:00:13
90F:→ shooter555: mason最煩的是舊環境要支援很麻煩 03/17 16:07
91F:→ shooter555: 不過現在還是很多專案還在用automake 03/17 16:07
92F:→ superpandal: kiss非常好 其實並不傻 03/17 17:08
93F:→ superpandal: 主要都是cmake又更複雜了 動態性也沒高太多 03/17 17:13
94F:→ superpandal: 太多 shell更動態 makefile用include也不錯 03/17 17:15
95F:→ superpandal: 不錯 很多人講不要拿shell搞大工程 03/17 17:16
96F:→ superpandal: 但其實很熟了也未嘗不可 也有好處 03/17 17:17
97F:→ superpandal: 當然不是指oneliner 03/17 17:20
98F:推 CLANNAD: project沒很大的話scons用起來最爽 03/18 18:07
99F:推 Raymond0710: 看了就累 幸好不怎麼寫cpp了... 03/20 17:20
100F:推 shibin: 我目前寫小專案還是用Makefile,遇到的問題都還沒你說的多 03/21 14:12
101F:→ shibin: 真的嚇人 03/21 14:13







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP