我有一個通過Autoconf配置的項目,我想在這個項目中開始使用C++ 11的功能。如何使「-std = gnu ++ 0x」開關始終處於啓用狀態並支持配置時檢查的功能?如何在Autoconf中使用C++ 11功能?
回答
你可以像AX_CHECK_COMPILE_FLAG
做到這一點,如:
AX_CHECK_COMPILE_FLAG([-std=c++0x], [
CXXFLAGS="$CXXFLAGS -std=c++0x"])
(你必須要小心這裏AC_LANG
是C++,在點不是C這就是所謂的,因爲它是可以使用GCC對C和其他的C++或反之亦然)。
這可能是不夠的:如果編譯器不支持-std == C++ 0x,那麼配置會成功,但構建將失敗。 –
+1,因爲很容易添加AC_MSG_ERROR的第三個參數 –
@WilliamPursell - 更有用的事情可能是使用AC_DEFINE與此結合使用,以便構建仍然可以繼續進行,只需使用不同的部分實現與我今天在C中處理'snprintf'丟失的方式完全一樣。這可能不是通過替代界面暴露或暴露的功能,但它可能不是現在的顯示屏。 – Flexo
爲了讓編譯器開關(除非,當然,用戶覆蓋它),把這個在您的Makefile.am
:
AM_CXXFLAGS=-std=c++0x
我不認爲有一個爲C的存在可用支票++ 11功能,但您應該能夠使用要使用的功能輕鬆編寫測試程序,如果這些功能不受支持,則該功能將失敗。然後在this section of the Autoconf manual.
如果在沒有C++ 11功能的情況下測試失敗,則標誌將需要位於CXXFLAGS中,否則配置將始終失敗。 –
描述,你可以寫一個測試,我認爲這樣做最簡單的方法是添加:
CXXFLAGS="$CXXFLAGS -std=c++0x"
在AC_PROG_CXX前configure.ac。如果編譯器不接受-std = C++ 0x,則配置將失敗,並且「C++編譯器無法創建可執行文件」。它不是最好的錯誤消息,但它確保如果配置成功,構建將成功。要獲得更好的錯誤消息,可以檢查編譯器是否接受AC_PROG_CXX之後的標誌。無論哪種情況,如果編譯器不提供必要的功能,但軟件需要它,則希望配置失敗。
請注意,在用戶在運行configure時未設置該變量的情況下,在AC_PROG_CXX之前設置CXXFLAGS會產生妨礙CXXFLAGS默認設置的不良副作用。出於這個原因,通常不建議在configury中設置CXXFLAGS,所以最好在AC_PROG_CXX之後檢查標誌(例如使用awoodland的解決方案) - 只要確保在AX_CHECK_COMPILE_FLAG的第三個參數中添加了AC_MSG_ERROR,以便如果功能不可用,配置將失敗。
這很可能是正確的解決方案。人們只需記住在Debian中安裝壓縮包'autoconf-archive',然後在運行'autoconf'(將所需的宏拉入'aclocal.m4')之前運行'aclocal'。 – carandraug
這是比我的更好的解決方案,當我最初回答這個問題時並不存在。 – Flexo
@carandraug如果您或OP能夠闡明更多細節,我將不勝感激。什麼是正確的安裝和使用語法?在安裝autoconf-archive之前,我總是會在configure.ac中調用一個語法錯誤(不是「找不到」)錯誤。安裝autoconf-archive後,我得到「語法錯誤:接近意外的標記'ac_config_headers =」$ ac_config_headers config.h「' – garyp
- 1. 用於C++的autoconf AC_CHECK_HEADERS 11
- 2. 無法啓用C++ 11使用autoconf
- 3. autoconf不啓用功能...
- 4. 看看如何實現C++ 11功能
- 5. 如何請使用isNaN作謂語功能爲std :: find_if(C++ 11)
- 6. 如何使用C++ 11個原子能
- 7. C++ 11功能與MinGW
- 8. C++ 11自動功能
- 9. C++ 11功能檢查
- 10. 如何在功能中使用功能
- 11. 如何在C++ 11中使用wregex?
- 12. 通用重試機制 - 不能使用C++ 11的功能
- 13. C++ 11個使用類函數模板parametrs在功能
- 14. 使用Qt構建時無法使用C++ 11功能
- 15. 如何使c + + 11自動更智能?
- 16. 如何在C++ 11
- 17. C++ 11 - 結合排序功能
- 18. 什麼autoconf的實際的AC_CHECK_FUNCS功能
- 19. 什麼是穩定的C++ 11功能可以安全使用
- 20. 如何使用autoconf指定#define的值?
- 21. 如何在FlexeLint中啓用C++ 11
- 22. 如何在CLion中啓用C++ 11?
- 23. 如何在gcc中啓用C++ 11?
- 24. 如何使用Autoconf檢查Linux版本?
- 25. 如何實現decltype功能 - 預C++ 11,編譯時間
- 26. 如何使用||在功能
- 27. 如何在C#中使用Excel的功能替換功能公式
- 28. 如何在Mac終端中使用C++ 11支持編譯C++
- 29. 如何告訴autoconf有關斷開的交叉HOST功能?
- 30. 如何使用autoconf與C++ 0x特性的
除非你想使用GCC擴展大的宏庫,你要使用的開關是「-std =的C++ 0x」。 –
這已經用Autoconf宏在這裏解決了http://stackoverflow.com/questions/8585110/how-can-i-specify-that-i-want-c0x-in-makefile-am。它的優點是,如果你沒有C++ 11編譯器支持,它不會失敗,而AC_CHECK_COMPILE_FLAG會在失敗時停止構建。 – 2013-01-03 09:00:49
如果之前已經詢問過,這怎麼可能是重複的? – lvella