看起來很荒謬,不會有關於此的問題,但我找不到一個。無論如何,我正在編寫一個makefile,我只是想要一個條件語句來設置不同的CFLAGS,這取決於GNU或Intel編譯器是否被用於編譯由環境變量CC設置的程序。Makefile:根據CC/CXX/FC值更改編譯器標誌
現在,在GNU一個部分進行手動這一點,並說像做了以下內容:
https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_7.html
ifeq ($(CC),gcc)
libs=$(libs_for_gcc)
else
libs=$(normal_libs)
endif
(OK設置庫沒有標誌,但不管,同樣的想法)。好吧,但這肯定只是條件如何工作的一個例子,因爲在實踐中,這顯然是一個愚蠢的做法。 CC變量可以包含除「gcc」之外的所有方式,並且仍然可以有效地使用GNU C編譯器。即使只是在CC中指定編譯器的絕對路徑也會打破這個例子。
那麼什麼是明智的,健壯的方式來做到這一點?另外,如果它很重要,我也想爲C++和Fortran編譯器選擇做同樣的事情。
最明智和最健壯的方法(恕我直言)是使用makefile編譯器(如CMake)爲您生成makefile。 CMake(和其他人)瞭解不同的平臺和工具集。 –
但是,即使使用CMake,如果您想根據編譯器設置其他編譯器標誌(或不同的庫等),仍然需要檢測編譯器(通常根據CMAKE_CXX_COMPILER_ID)。因此,您仍然可能無法完全擺脫編譯器檢測(例如,如果您想強制使用其他編譯器可能無法識別的GCC/CLang的「-Wall -Wextra -Werror」)。但是,如果我有選擇,我也更喜歡使用CMake。 – axalis
是的CMake肯定是更好的,但我實際上處理一些遺留代碼,我只是想修復現有的生成文件,以便它不那麼容易被破壞。 –