2013-08-01 29 views
20

Có cách nào để nối chuỗi trong cmake không?Làm thế nào để bạn nối chuỗi trong cmake

Tôi có một thư mục chỉ chứa tệp .cpp với các phương pháp chính. Tôi nghĩ rằng điều này sẽ được dễ dàng bằng cách chỉ sử dụng một foreach thông qua tất cả các tập tin src. Đây là những gì tôi đã có được điều này đến nay:

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

Làm cách nào tôi có thể làm những gì được mô tả trong nhận xét?

Trả lời

29

"${src}.out" sẽ hoạt động tốt, vì vậy bạn có thể viết set(NAME "${src}.out") và sử dụng ${NAME} bất cứ nơi nào bạn cần.

+5

Chỉ cần một, chỉnh kén cá chọn canh nhỏ xíu. Chủ đề của câu hỏi là 'Làm thế nào để bạn nối chuỗi trong cmake'. Vì vậy, dấu chấm '.' trong câu trả lời là một chút gây hiểu lầm. Câu trả lời tổng quát suiting sẽ là: '" $ {stringA} $ {stringB} "' hoặc '" $ {stringA} bla "' hoặc '" bla $ {stringA} "' là các ví dụ để nối chuỗi biến hoặc chuỗi biến với chuỗi chữ. – yau

3

nếu bạn chỉ muốn đối phó với giá trị chuỗi, hãy xem @nonexplosive's answer.

Tuy nhiên nếu bạn muốn có một biến cmake trong CMakeLists.txt của bạn và thiết lập rằng biến một số giá trị sử dụng hoặc làm: [string()] cho cmake 3.0 trở lên (https://cmake.org/cmake/help/v3.0/command/string.html) hoặc set() cho cmake 2.0+.

Lý do bạn có hai tùy chọn là vì cmake cũ không hỗ trợ tính năng CONCAT.

Ví dụ 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}") 

Full stdout:

-- DEBUG: x=hellogoodbye 
-- DEBUG: y=hellogoodbye 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /home/_______/testing/_______ 
Các vấn đề liên quan