2013-08-01 15 views
20

Czy istnieje sposób łączenia łańcuchów w cmake?Jak połączyć łańcuch w cmake

Mam folder, który zawiera tylko pliki .cpp z głównymi metodami. Myślałem, że to będzie łatwe, po prostu używając foreach przez wszystkie pliki src. Oto, co mam tak daleko:

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

Jak mogę zrobić to, co opisano w komentarzu?

Odpowiedz

29

"${src}.out" powinien działać dobrze, abyś mógł napisać set(NAME "${src}.out") i używać ${NAME} wszędzie tam, gdzie potrzebujesz.

+5

Wystarczy niewielka, wybredna korekta. Tematem pytania jest "Jak połączyć łańcuch w cmake". Więc kropka '.' w odpowiedzi jest trochę myląca. Odpowiedź bardziej ogólna brzmi: "$ {stringA} $ {stringB}" 'lub' "$ {stringA} bla" 'lub' "bla $ {stringA}" 'są przykładami łączenia zmiennych łańcuchowych lub zmiennych łańcuchowych z literały ciągów. – yau

3

jeśli chcesz po prostu zająć się wartością ciągu, zobacz @nonexplosive's answer.

Jednak jeśli chcesz mieć zmienną CUpewnij w CMakeLists.txt i ustawić tę zmienną do pewnej wartości należy używać albo: [string()] dla CUpewnij 3.0+ (https://cmake.org/cmake/help/v3.0/command/string.html) lub set() dla CUpewnij 2.0+.

Powodem, dla którego masz dwie opcje, jest to, że starszy cmake nie obsługuje funkcji CONCAT.

Przykład 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}") 

Pełna stdout:

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