2016-07-17 44 views
3

當使用很常見,生成config.h文件通過指定AC_CONFIG_HEADERSconfigure.ac這樣的自動工具:CMake的生成類似的config.h Autoconf中

AC_CONFIG_HEADERS([config.h]) 

,這是什麼相應的等價使用CMake的時候?

+1

見[具體](https://cmake.org/cmake/help/v3.0/command/configure_file.html)和 [一般](HTTP:// WWW。 vtk.org/Wiki/CMake:How_To_Write_Platform_Checks)文檔。 –

+1

[CMake:如何檢查Autotools中的頭文件和庫函數?](http://stackoverflow.com/questions/647892/cmake-how-to-check-header-files-and-library-functions樣功能於自動工具) – usr1234567

回答

7

您必須創建一個類似於config.h.in的文件。像

#cmakedefine HAVE_FEATURE_A @[email protected] 
#cmakedefine HAVE_FEATURE_B @[email protected] 
#cmakedefine HAVE_FEATURE_BITS @[email protected] 

東西然後你必須聲明變量Feature_A_FOUNDFeature_B_FOUNDB_BITSIZE在CMake的代碼,並呼籲

configure_file(config.h.in config.h) 

這將導致類似於從自動工具的一個一個的config.h文件。如果找不到變量或設置爲false,則該行將被註釋。否則,該值將被插入。假設Feature_A_FOUND=A-NOTFOUND¸Feature_B_FOUND=/usr/lib/bB_BITSIZE=64,這將導致在

/* #undef HAVE_FEATURE_A @[email protected] */ 
#define HAVE_FEATURE_B /usr/lib/b 
#define HAVE_FEATURE_BITS 64 

大概HAVE_FEATURE_B將得到更好的定義爲#cmakedefine01,這導致取決於變量的值0或1。

通常可以創建由Autotools生成的每個config.h文件,因爲CMake更加靈活。但是它需要更多的工作,並且你不能自動獲得config.h,但你必須自己編寫.in文件。

文檔: https://cmake.org/cmake/help/v3.6/command/configure_file.html