2009-03-18 21 views
22

में बैश कमांड का उपयोग कैसे करें मैं सोच रहा हूं कि मैं CMakeLists.txt में बैश कमांड का उपयोग कैसे कर सकता हूं।सीएमके: CMakeLists.txt

export variable=`getconf _NPROCESSORS_ONLN` 

और की तरह कुछ का उपयोग कर चर के लिए NB_PROCESSOR सेट:: क्या मैं चाहता हूँ का उपयोग कर लिया गया प्रोसेसर की संख्या प्राप्त करने के लिए है

SET (NB_PROCESSOR variable) 

तो मेरे सवाल का कैसे मैं CMakeLists में getconf आदेश का उपयोग कर सकते हैं। txt और मैं सीएमकेई एसईटी कमांड में परिणाम (चर में संग्रहीत) का उपयोग कैसे कर सकता हूं?

उत्तर

19

ऐसा लगता है कि यह चाल है, और "सेट" भी बचाता है।

execute_process(COMMAND getconf _NPROCESSORS_ONLN 
       OUTPUT_VARIABLE NB_PROCESSOR) 
+0

, मैं के दौरान आदेश का परिणाम देखने के "cmake।" लेकिन अगर मेरे पास config_.h.in में "#cmakedefine NB_PROCESSOR $ {NB_PROCESSOR}" है, तो मुझे "#bfine NB_PROCESSOR मान" के बजाय "#undef NB_PROCESSOR" मिलेगा। कोई सुराग? – claf

+0

मैंने गड़बड़ की - यह OUTPUT_ होना चाहिए RESULT_VARIABLE नहीं। पूर्व कार्यक्रम से आउटपुट स्टोर करता है, बाद में नतीजा ($? बैश-स्पीच में) – richq

+0

पहले से ही कोशिश करता है और काम नहीं करता है, मुझे लगता है कि परिणाम स्ट्रिंग के रूप में माना जा सकता है और मुझे एक इंट चाहिए। अभी भी एक समाधान खोजने की कोशिश कर रहा है :) – claf

7

EXEC_PROGRAM आदेश का उपयोग करें और फिर GTK_PKG_FLAGS की तरह एक चर करने के लिए उत्पादन को बचाने के लिए सेट आदेश का कैश विकल्प का उपयोग करें। फिर मान जोड़ने के लिए एसईटी कमांड का उपयोग करें। कुछ इस तरह:

IF(NOT GTK_PKG_FLAGS) 
    EXEC_PROGRAM(pkg-config ARGS --cflags --libs gtkmm 
       OUTPUT_VARIABLE GTK_PKG_FLAGS) 
    SET(GTK_PKG_FLAGS "${GTK_PKG_FLAGS}" CACHE STRING "GTK Flags") 
ENDIF(NOT GTK_PKG_FLAGS) 
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GTK_PKG_FLAGS}") 

लिंक: http://www.cmake.org/pipermail/cmake/2005-January/006051.html

इस के साथ