2013-08-01 8 views
20

C'è un modo per concatenare stringhe in cmake?Come si concatena la stringa in cmake

Ho una cartella che contiene solo file .cpp con i metodi principali. Ho pensato che sarebbe stato facile semplicemente usando un foreach attraverso tutti i file src. Questo è quello che ho ottenuto fino a qui:

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}) 

Come posso fare quanto descritto nel commento?

risposta

29

"${src}.out" dovrebbe funzionare correttamente, quindi è possibile scrivere set(NAME "${src}.out") e utilizzare ${NAME} ovunque sia necessario.

+5

Solo una piccola, la correzione schizzinosi. L'argomento della domanda è "Come si concatena la stringa in cmake". Quindi il punto '.' nella risposta è un po 'fuorviante. La risposta più generale sarebbe la seguente: '" $ {stringA} $ {stringB} "' o '" $ {stringA} bla "' o '" bla $ {stringA} "' sono esempi per concatenare variabili stringa o variabili stringa con stringhe letterali. – yau

3

se si desidera gestire un valore di stringa, vedere @nonexplosive's answer.

Tuttavia, se si desidera avere una variabile cmake nella vostra CMakeLists.txt e impostare questa variabile a un valore non utilizzare: [string()] per cmake 3.0+ (https://cmake.org/cmake/help/v3.0/command/string.html) o set() per cmake 2.0+.

Il motivo per cui sono disponibili due opzioni è perché la versione precedente di cmake non supporta la funzionalità CONCAT.

Esempio 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}") 

stdout completa:

-- DEBUG: x=hellogoodbye 
-- DEBUG: y=hellogoodbye 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/_______/testing/_______