2013-08-01 12 views
20

में स्ट्रिंग को कैसे जोड़ते हैं क्या सेमेक में तारों को संयोजित करने का कोई तरीका है?आप cmake

मेरे पास एक फ़ोल्डर है जिसमें मुख्य विधियों के साथ केवल .cpp फ़ाइलें शामिल हैं। मैंने सोचा कि सभी स्रोत फ़ाइलों के माध्यम से सिर्फ एक 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+।

आपके पास दो विकल्प हैं क्योंकि पुराने सेमेक 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}") 

पूर्ण stdout:

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