作者 hizuki (真女主角愛與正義的天使)
標題 [討論] 可以不要再手刻Makefile 改用cmake, meson不好嗎
時間 Tue Mar 14 15:07:46 2023


: 推 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 (美國)
※ 作者: hizuki 2023-03-14 15:07:46
※ 文章代碼(AID): #1a41r95T (Soft_Job)
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1678777673.A.15D.html
Apache: 都用Bazel1F 03/14 15:40
Bazel語法沒法理解,我覺得bazel更像bitbake了。
pacino: autoconf 很好用啊2F 03/14 15:50
大哥,貓王死了啊。九十年代過了
tennyleaz: 我常常都用動態DllImport比較懶XD3F 03/14 16:04
Windows派是吧,多來幾個你試看看,還有你多來幾個C++ ABI
labbat: docker 萬用解4F 03/14 16:18
docker只能幫你準備environment,這些不基本上不用來準備environment的
※ 編輯: hizuki (192.147.44.15 美國), 03/14/2023 16:24:58
labbat: 題外話,好奇你引用的那些留言串出自那篇文章呀5F 03/14 16:27
timmerix: 你這些都還好, 有些公司有自己內部的make系統, 完全沒有詳細的使用說明, build報錯只能猜或自己做實驗試6F 03/14 16:48

--
作者 hizuki 的最新發文:
點此顯示更多發文記錄