ホームページ >バックエンド開発 >C++ >C ソース コードで CMake 変数にアクセスして使用する方法

C ソース コードで CMake 変数にアクセスして使用する方法

DDD
DDDオリジナル
2024-10-30 05:14:021005ブラウズ

How to Access and Use CMake Variables in C   Source Code?

C ソース コードでの CMake 変数の読み取り

多くの開発者は、バージョン番号などの構成情報を簡単に中央の場所に保存することを好みます。管理の。 CMake は、その構成ファイル内でそのような変数を定義するための便利なメカニズムを提供します。この記事では、コンパイル中に C ソース コード内でこれらの変数にアクセスして利用する方法について説明します。

CMake 変数の定義

CMake 変数を定義するには、SET コマンドを使用します。以下は、LIBINTERFACE_VERSION という名前の変数を値 1 で定義する例です。

SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface")

C コードに変数を渡す

CMake 変数を定義したら、次のことが可能になります。 add_settings または configure_file コマンドを使用して、C コードで使用できるようにします。

add_settings の使用

add_settings コマンドは、CMake 変数を C コードに渡す簡単で簡単な方法です。 。ソース コードで使用できるプリプロセッサ定義を作成します。

add_definitions( -DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION} )

これにより、値 LIBINTERFACE_VERSION を使用してプリプロセッサ定義 VERSION_LIBINTERFACE が作成され、C コード内で使用できるようになります。

configure_file の使用

configure_file は、ヘッダー ファイル テンプレートを作成し、CMake を使用してそれに変数を代入できる、より汎用性の高いアプローチです。この方法は柔軟性が高く、異なる構成で複数のヘッダー ファイルを生成するために使用できます。

テンプレート ヘッダー ファイルの作成

まず、次のようなテンプレート ヘッダー ファイルを作成します。

#ifndef VERSION_CONFIG_H
#define VERSION_CONFIG_H

// define your version_libinterface
#define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@

#endif // VERSION_CONFIG_H

このテンプレートは、LIBINTERFACE_VERSION の値を持つ VERSION_LIBINTERFACE プリプロセッサ マクロを定義します。

configure_file の使用

CMakeLists.txt ファイルで、configure_file を使用して version_config.h ヘッダー ファイルを生成します。

configure_file( version_config.h.in ${CMAKE_BINARY_DIR}/generated/version_config.h )

このコマンドは、@LIBINTERFACE_VERSION@ プレースホルダーを変数の実際の値に置き換え、 header file.

生成されたヘッダー ファイルをインクルードする

最後に、生成された version_config.h ヘッダー ファイルを C ソース コードに必ずインクルードします:

#include <generated/version_config.h>

これらの方法のいずれかを使用すると、C ソース コード内の CMake 変数にアクセスして使用できます。 add_settings と configure_file は両方とも、特定のニーズとプロジェクト構造に応じて、さまざまな利点を提供します。

以上がC ソース コードで CMake 変数にアクセスして使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。