2013-07-23 2 views
0

У меня есть небольшая библиотека, которую я создал, которая стоит вместе, за исключением одного необязательного метода в классе, который требует Imagemagick. Поэтому я стараюсь, чтобы не компилировать этот метод, если на компьютере нет установленного Imagemagick; а не просто проваливается. Единственная проблема заключается в том, что заголовок будет по-прежнему определять этот метод (хотя он не был скомпилирован). Есть ли способ удалить этот метод из заголовка, используя Cmake или какой-либо другой подход?Cmake установить заголовок без определенного метода

ответ

1

Wrap определение в определении препроцессора:

#ifdef HAVE_IMAGEMAGICK 
    void myFunctionDefinition(void); 
#endif 

Затем в CMake, если ImageMagick найден, добавить определение проекта. CMake передаст это определение в командную строку компилятора, которая определит токен препроцессора.

IF(IMAGEMAGICK_FOUND) # or whatever CMake variable holds this info 
    ADD_DEFINITIONS(-DHAVE_IMAGEMAGICK) 
ENDIF() 

В качестве альтернативы, если у вас есть много таких определений, вы можете рассмотреть файл include для хранения всех этих конфигураций. Команда CMake CONFIGURE_FILE может затем развернуть все утверждения конфигурации всего файла сразу.

+0

Хотя это будет работать с созданием библиотеки, оно не удалит это объявление в заголовках. Таким образом, IDE по-прежнему обнаруживают существование этого метода, даже считают, что он определен. На данный момент я просто создал исключение и выбросил его, если его вызвали, когда Imagemagick не скомпилирован. Хороший ввод, хотя :) –

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