どのようにcmakeで文字列を連結しますか



How Do You Concatenate String Cmake



解決:

'$ {src} .out'は正常に機能するはずなので、次のように書くことができます。set(NAME '$ {src} .out')そして使用する必要な場所に$ {NAME}。


3つの典型的なCMake文字列連結方法

この特定の質問への回答は、セットまたは文字列、3番目の可能性があります文字列を任意の文字で結合する場合はリストします。



設定()

bashのように文字列を組み合わせるだけです

set(FILE file)set(FILE_TXT $ {FILE} .txt)message(STATUS'FILE_TXT:$ {FILE_TXT} ')

文字列(CONCAT)

すべての入力引数を連結し、結果を名前付き出力変数に格納します。



string(CONCAT [...])

string(CONCAT MULTI'xxxx''YYYY''xxxx ')message(STATUS'MULTI:$ {MULTI}')

リスト(APPEND)

リストに要素を追加します。

list(APPEND [...])



コンパイラフラグのようなものに関しては、これは選択のツールです。 CMakeのリストはセミコロンで区切られた文字列であり、引用すると、リストがセミコロンで結合されます。

list(APPEND FLAGS'-D option1 ')list(APPEND FLAGS'-D option2')list(APPEND FLAGS'-D option3 ')list(JOIN FLAGS' 'FLAGS)message(STATUS'FLAGS:' $ {FLAGS}) 

文字列値を処理したいだけの場合は、@ nonexplosiveの回答を参照してください。

ただし、Cmake変数を使用したい場合CMakeLists.txtを作成し、その変数を何らかの値に設定するには、次のいずれかを使用します。[string()] Cmake 3.0以降(https://cmake.org/cmake/help/v3.0/command/string.html)またはCmake 2.0以降のset()。

2つのオプションがある理由は、古いcmakeがサポートしていないためです。CONCAT機能。

CMakeLists.txtの例:

cmake_minimum_required(VERSION 2.8.11)project(Hello)string(CONCAT x'hello''goodbye ')set(y'hellogoodbye')message(STATUS'DEBUG:x = $ {x} ')message(STATUS'DEBUG:y = $ {y} ')

完全な標準:

--DEBUG:x = hellogoodbye-DEBUG:y = hellogoodbye-構成完了-生成完了-ビルドファイルは次の場所に書き込まれました:/ home / _______ / tests / _______