基於 SDL2 控制版本進行檢測
如果你有 cmake
模組。你可以建立一個名為 in
的資料夾來儲存所有配置檔案。
例如,你有一個名為 FOO
的專案,你可以建立一個 FOO_config.h.in
檔案,如:
//===================================================================================
// CMake configuration file, based on SDL 2 version header
// ===================================================================================
#pragma once
#include <string>
#include <sstream>
namespace yournamespace
{
/**
* \brief Information the version of FOO_PROJECT in use.
*
* Represents the library's version as three levels: major revision
* (increments with massive changes, additions, and enhancements),
* minor revision (increments with backwards-compatible changes to the
* major revision), and patchlevel (increments with fixes to the minor
* revision).
*
* \sa FOO_VERSION
* \sa FOO_GetVersion
*/
typedef struct FOO_version
{
int major; /**< major version */
int minor; /**< minor version */
int patch; /**< update version */
} FOO_version;
/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
*/
#define FOO_MAJOR_VERSION 0
#define FOO_MINOR_VERSION 1
#define FOO_PATCHLEVEL 0
/**
* \brief Macro to determine FOO version program was compiled against.
*
* This macro fills in a FOO_version structure with the version of the
* library you compiled against. This is determined by what header the
* compiler uses. Note that if you dynamically linked the library, you might
* have a slightly newer or older version at runtime. That version can be
* determined with GUCpp_GetVersion(), which, unlike GUCpp_VERSION(),
* is not a macro.
*
* \param x A pointer to a FOO_version struct to initialize.
*
* \sa FOO_version
* \sa FOO_GetVersion
*/
#define FOO_VERSION(x) \
{ \
(x)->major = FOO_MAJOR_VERSION; \
(x)->minor = FOO_MINOR_VERSION; \
(x)->patch = FOO_PATCHLEVEL; \
}
/**
* This macro turns the version numbers into a numeric value:
* \verbatim
(1,2,3) -> (1203)
\endverbatim
*
* This assumes that there will never be more than 100 patchlevels.
*/
#define FOO_VERSIONNUM(X, Y, Z) \
((X)*1000 + (Y)*100 + (Z))
/**
* This is the version number macro for the current GUCpp version.
*/
#define FOO_COMPILEDVERSION \
FOO_VERSIONNUM(FOO_MAJOR_VERSION, FOO_MINOR_VERSION, FOO_PATCHLEVEL)
/**
* This macro will evaluate to true if compiled with FOO at least X.Y.Z.
*/
#define FOO_VERSION_ATLEAST(X, Y, Z) \
(FOO_COMPILEDVERSION >= FOO_VERSIONNUM(X, Y, Z))
}
// Paths
#cmakedefine FOO_PATH_MAIN "@FOO_PATH_MAIN@"
此檔案將在安裝路徑中建立一個 FOO_config.h
,其中一個變數在 c tike6 中定義,來自 cmake 變數。要生成它,你需要在 CMakeLists.txt 中包含 in
檔案,如下所示(設定路徑和變數):
MESSAGE("Configuring FOO_config.h ...")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/common/in/FOO_config.h.in"
"${FOO_PATH_INSTALL}/common/include/FOO_config.h" )
該檔案將包含模板中的資料,以及包含實際路徑的變數,例如:
// Paths
#define FOO_PATH_MAIN "/home/YOUR_USER/Respositories/git/foo_project"