2013-08-01 91 views
20

cmakeで文字列を連結する方法はありますか?cmakeで文字列を連結する方法

私は、メインの方法で.cppファイルのみを含むフォルダを持っています。私はすべてのsrcファイルでforeachを使うだけで簡単にできると思いました。これは私がこれまで持っているものです:

project(opengl-tutorial) 
cmake_minimum_required(VERSION 2.8) 

aux_source_directory(. SRC_LIST) 

add_definitions(
    --std=c++11 
) 

foreach (src ${SRC_LIST}) 
    # name = ${src} + ".out" 
    add_executable(${name} ${src}) 
    target_link_libraries(${name} GL GLU GLEW glfw) 
endforeach(src ${SRC_LIST}) 

コメントに記載されていることをどうすればいいですか?

答えて

29

"${src}.out"は正常に動作するはずですので、set(NAME "${src}.out")と書いて、必要なところで${NAME}を使用してください。

+5

ただ、小さな、うるさい補正。質問のトピックは、どのように文字列をcmakeで連結するのですか?その答えのドット '.'はちょっと誤解を招いています。より適切な答えは、 '' $ {stringA} $ {stringB} '''または '' $ {stringA} bla' 'や '' bla $ {stringA}' 'は文字列変数や文字列変数を文字列リテラル。 – yau

3

文字列値を処理したい場合は、@nonexplosive's answerを参照してください。

しかし、あなたのCMakeLists.txtにcmakeの変数を持っており、使用しないいくつかの値にその変数を設定したい場合は、次のいずれか[string()] cmakeのため3.0+(https://cmake.org/cmake/help/v3.0/command/string.html)またはcmakeのためset() 2.0+。

古いCMakeがCONCAT機能をサポートしていないため、2つの理由があります。

例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 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/_______/testing/_______ 
関連する問題