2009-03-18 3 views
22

Мне интересно, как я могу использовать команду bash в CMakeLists.txt. То, что я хочу, чтобы получить количество процессоров найденного с помощью:CMake: как использовать команду bash в CMakeLists.txt

export variable=`getconf _NPROCESSORS_ONLN` 

и установить NB_PROCESSOR в переменный, используя что-то вроде:

SET (NB_PROCESSOR variable) 

Так что мой вопрос, как я могу использовать команду getconf в CMakeLists. txt и как я могу использовать результат (хранимый в переменной) в команде CMake SET?

ответ

19

Это похоже на трюк и сохраняет «набор».

execute_process(COMMAND getconf _NPROCESSORS_ONLN 
       OUTPUT_VARIABLE NB_PROCESSOR) 
+0

с этим, я вижу результат команды во время "CMake." но если у меня есть «#cmakedefine NB_PROCESSOR $ {NB_PROCESSOR}» в мой config.h.in, я получу «#undef NB_PROCESSOR» вместо «#define NB_PROCESSOR value». Любая подсказка? – claf

+0

Я испортил - он должен быть OUTPUT_ not RESULT_VARIABLE. Первый хранит вывод из программы, последний результат ($? In bash-speak) – richq

+0

уже пробовал и кажется не работает, я думаю, что результат может рассматриваться как строка, и я хочу int. Все еще пытаясь найти решение :) – claf

7

Используйте команду EXEC_PROGRAM, а затем использовать параметр CACHE команды SET , чтобы сохранить результат в переменной, как GTK_PKG_FLAGS. Затем используйте команду SET, чтобы добавить значение. Что-то вроде этого:

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

Смежные вопросы