Подтвердить что ты не робот

Как вы объединяете строку в cmake

Есть ли способ связать строки в cmake?

У меня есть папка, в которой содержатся только файлы .cpp с основными методами. Я думал, что это будет легко, просто используя foreach через все файлы src. Вот что у меня получилось так:

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

Как я могу сделать то, что описано в комментарии?

4b9b3361

Ответ 1

"${src}.out" должен работать нормально, поэтому вы можете написать set(NAME "${src}.out") и использовать ${NAME} везде, где вам нужно.

Ответ 2

если вы просто хотите иметь дело со строковым значением, см. @nonexplosive answer.

Однако, если вы хотите иметь переменную Cmake в своем CMakeLists.txt и установить эту переменную в какое-то значение, используйте либо: [string()] для Cmake 3.0+ (https://cmake.org/cmake/help/v3.0/command/string.html) или set() для Cmake 2.0 +.

Причина, по которой у вас есть два варианта, состоит в том, что старший 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
-- Configuring done
-- Generating done
-- Build files have been written to: /home/_______/testing/_______