2009-03-18 14 views
22

Mi chiedo come utilizzare il comando bash in CMakeLists.txt. Quello che voglio è quello di ottenere il numero di processori recuperati utilizzando:CMake: come utilizzare il comando bash in CMakeLists.txt

export variable=`getconf _NPROCESSORS_ONLN` 

e impostare NB_PROCESSOR alla variabile utilizzando qualcosa di simile:

SET (NB_PROCESSOR variable) 

Quindi la mia domanda è come posso usare il comando getconf in CMakeLists. txt e come posso usare il risultato (memorizzato nella variabile) nel comando CMake SET?

risposta

19

Questo sembra fare il trucco e salva anche il "set".

execute_process(COMMAND getconf _NPROCESSORS_ONLN 
       OUTPUT_VARIABLE NB_PROCESSOR) 
+0

con questo, vedo il risultato del comando durante la "cmake." ma se ho #cmakedefine NB_PROCESSOR $ {NB_PROCESSOR} "nel mio config.h.in, otterrò" #undef NB_PROCESSOR "invece di" #define NB_PROCESSOR value ". Qualche indizio? – claf

+0

Ho incasinato - dovrebbe essere OUTPUT_ non RESULT_VARIABLE. Il primo memorizza l'output dal programma, il secondo il risultato ($? In bash-speak) – richq

+0

già provato e sembra non funzionare, penso che il risultato possa essere considerato come una stringa e voglio un int. Sto ancora cercando di trovare una soluzione :) – claf

7

utilizzare il comando exec_program e quindi utilizzare l'opzione CACHE del comando SET per salvare l'output ad una variabile come GTK_PKG_FLAGS. Quindi utilizzare il comando SET per aggiungere il valore. Qualcosa di simile a questo:

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

vicini: http://www.cmake.org/pipermail/cmake/2005-January/006051.html

Problemi correlati