2014-04-07 60 views
0

我正在使用ncurses爲C編寫一個使用自動工具進行編譯的CLI。除了實際的應用程序之外,還有一個測試框架(裁剪器),並且有一些預處理器常量可以啓用或禁用某些功能(例如,有一個與所有ncurses窗口相鄰的恆定WINDOW窗口 - 用於管理窗口布局)。使用自動工具創建多個標誌

當然,這些常量中的一些可以在編譯時手動指定(即make),但我想要有2個構建目標:調試和發佈。此外,刀具有問題(配置檢查它,如果要使用它,應該會發生這種情況,但我不能要求普通用戶安裝刀具進行編譯)。所以,我在考慮以下設置:創建一個啓用測試的配置標誌(默認禁用)和2個目標(make創建發行版本並進行調試,調試)。這個工作流是否正確或有更好的方法來做到這一點?

+0

許多人使用[像這樣](http://stackoverflow.com/a/2264636/425738)而不是單獨的調試/發佈版本。這通常可以在運行時間性能和發佈後進行調試之間做出很好的折衷。 – ldav1s

+0

好吧,這不是關於-g標誌的問題,因爲它是用於應用程序開發和調試的代碼部分(例如移除某些檢查以使應用程序的測試更容易,可以看到圍繞窗口的邊界以查看你在做什麼等等)。這些由預處理指令#ifdef和#ifndef處理,通過是否存在某個符號常量來切換。 – Paul92

+0

您不能要求您的產品的普通用戶安裝切割機,但絕對可以要求開發人員這樣做。用戶應該安裝預先構建的二進制文件,而不需要處理任何這種情況。對「開發人員」的一個相當寬鬆的定義可以包括任何想要運行「make check」的人,因此要求該人安裝另一個工具是完全合理的,但是也很容易檢查是否安裝了切割器並縮減根據需要進行測試(警告中提示「測試不完整:請安裝切割器」) –

回答

1

如果是我,我會使用AC_ARG_WITH設置刀具測試框架所在的位置(例如,包含/庫路徑)以及任何與刀具有關的事物(例如預處理器標誌)以及一個或多個AC_ARG_ENABLE變量(或者可能是AC_ARG_WITH)來啓用其他預處理器指令。這樣你就不必維護一個調試目標。

+0

爲什麼最好使用AC_ARG_ENABLE而不是維持調試目標? – Paul92

+0

如果您的應用程序非常簡單(例如,單個可執行文件),維護調試目標可能會變得很容易。只需將文件列表複製到調試目標(使用調試預處理器標誌,並添加/省略轉換單元進行調試),並希望在主目標版本更改時記住維護調試目標。如果還有其他複雜性(例如,依賴庫),則必須重複(並維護)這些複雜性。或者,您可以在AC_ARG_ENABLE中AC_DEFINE調試預處理器變量,並且沒有調試目標。 – ldav1s

+0

繼續,至少這樣,當主目標構建發生變化時,爲調試設置的應用程序不會過時,因爲它是主要目標。不幸的是,這並不能保證「調試」版本不會因主版本的改變而被破壞。如果兩個版本都必須始終可構建,則必須維護兩個目標。 – ldav1s