2017-04-27 80 views
0

我現在正在研究重構autotools項目lnav可以使用yocto構建。這意味着lnav本身必須進行交叉編譯,而一些幫助程序必須本地構建。autotools - 交叉編譯和構建本地中間構建程序

我已經找到這個線程this thread,但是第一個建議的解決方案不起作用,而第二個是對項目結構的嚴重侵入。

有人可以給我一個提示如何解決這個問題嗎?也許告訴我哪些AC/AM宏可以做這項工作,或者在哪裏獲得一個很好的例子。

+0

我不確定我瞭解問題的性質。爲什麼你需要在同一個版本中爲不同的主機類型構建組件?這些助手是否只支持*構建*,或者它們是可安裝的包? –

+0

@john是的,你是對的。這些幫助程序僅用於構建,而不是安裝在目標上。 –

回答

1

如果您需要爲不同的執行主機構建不同的組件,那麼最簡單的方法是單獨構建構建工具。你鏈接的答案之一描述了一種方法來做到這一點。然而,如果你有一個精心編寫的Autotools構建系統,那麼你可以通過利用out-of-source構建來解決這個問題。這可以編寫腳本。

創建一個目錄,在其中構建工具。在該目錄中,配置構建系統(path-to-source-dir/configure),然後構建(只)所需的工具。然後在源目錄或另一個源外編譯目錄中,通過指定適當的--build--host三元組到configure來配置交叉編譯,將已經構建的工具複製或鏈接到構建目錄中,並執行其餘的構建。

如果構建系統特別精心製作,那麼您可能需要針對不同主機上構建工具的不同可執行擴展的規定。如果你需要這樣做,並且你打算編寫兩段式交叉編譯腳本,那麼當你複製/鏈接工具時,你可能會處理這個問題。這將避免任何需要爲其核心構建系統寫入特殊支持。

爲了支持交叉編譯一般來說,configure.ac應該使用AC_CANONICAL_BUILDAC_CANONICAL_HOST宏和構建機器需要安裝合適的交叉編譯工具鏈。

+0

感謝提示;) –