Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

はじめに

みなさん、こんにちは。今回は、変数の基本構造について書いていきます。

変数の型

実は、CMakeの変数には型というものがありません。すべてが文字列として格納されます。これは、1などの数値も該当します。

変数の生成・代入

変数は、set()コマンドを用いて生成することができます。

set(value 1) # 値が1の変数valueを生成

また、既存の変数への代入もset()コマンドを用います。

set(value 1) # 値が1の変数valueを生成
set(value 2) # 既存の変数valueに値1を代入

変数の削除

変数の削除には、unset()コマンドを用います。

set(value 1) # 変数valueを生成
unset(value) # 変数valueを削除

変数の値の参照

変数の値の参照は、${variable-name}という構文で行います。

set(value 1)
message(${value}) # 1

存在しない変数を参照した場合は、空文字列が返されます。

message("not_existing_value: '${not_existing_value}'") # not_existing_value: ''

変数の値の参照は、入れ子にすることもできます。

set(value 1)
set(value_name value)
message(${${value_name}}) # 1

また、組み合わせることもできます

set(value_10 1)
set(value_basename value)
set(value_no 10)
message(${${value_basename}_${value_no}}) # 1

変数名

変数名は、コマンド名と違って大文字・小文字を区別します。

set(value 1)
set(Value 2)
set(VALUE 3)
message(${value}) # 1
message(${Value}) # 2
message(${VALUE}) # 3

また、ほぼすべての文字——おそらくコマンド引数に使用できる文字すべてが使えますが、英数字・ハイフン-・アンダースコア_のみを使用することが奨励されています。

なぜ使える文字が制限されているのでしょうか?ためしに、変数名を奨励外の文字を使ってvalue[1]としてみましょう。

set(value[1] 1) # OK

問題なく作成できました。次にこれを参照してみます。

message(${value[1]}) # エラー

エラーになってしまいました。どうやら変数参照の構文には上記で示した奨励されている文字以外は使用できないようです。このような名前の変数を参照するためには、以下のように変数名を一度別の変数に代入してから行う必要があります。

set(value[1] 1)
set(value_name value[1])
message(${${value_name}}) # 1

おわりに

以上、CMakeの変数についてでした。奨励されている文字以外で変数を作成しても、警告がでないので気をつけたいところですね。

明日は、mrk_21 さんの『CMake: リスト』です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What are the problem?