2009-12-11 5 views
12

add_definitions добавляет определение, которое фиксируется во время выполнения cmake (not make). Как определить их при выполнении make (not cmake)? Значение определения будет выводить пользовательскую команду.Как определить флаги компилятора во время компиляции с помощью CMake?

ответ

-3

Вот пример косметическим файла:

 
.SUFFIXES: .c.o 
CC = cc 
INCLUDE = -I/usr/include -I/usr/sys/include 
# Comment out one or the other, mutually exclusive 
CFLAGS = -g # Debugging info 
#CFLAGS = -O2 # Optimize code 
LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # Debugging libs 
#LIBS = -L/usr/lib # Release 
FILES = mysource.o myroutines1.o myroutines2.o 
APP = myapp 
.c.o: 
    $(CC) $(INCLUDE) $(CFLAGS) -c $< 

all : $(APP) 

$(APP) : $(FILES) 
    $(CC) -o [email protected] $(FILES) $(LIBS) $(CFLAGS) 

clobber : clean mrproper 

clean: 
    rm -rf $(FILES) 

mrproper: 
    rm -rf $(APP) 

Обратите внимание, как флаг CFLAGS определен. Закомментируйте другой в зависимости, если вы делаете отладки или выпустить сборку ..

Приведенный выше пример для косметическим файла из моего учебника для создания исполняемого файла с именем myapp, который компонует из mysource.c, myroutines1.c и myroutines2.c. И это показывает, как делает достаточно умным, чтобы создать исполняемый файл без перекомпиляции.

Примечание Файл makefile имеет ориентацию unix/linux и очень строгий на вкладках/пробелах, которые не отображаются в примере выше!

Надеюсь, это поможет, С уважением, Tom.

+0

Не понимаю, почему это было downvoted как ОП ясно сказано другими словами, как определить их в make-файле, это было мое понимание? Поправьте меня, если я неправильно понял? – t0mm13b

+5

Я не ОП, и это немного поздно ... но ... Я полагаю, что OP (как и я) ищет команду CMake, которая реализует эту логику в автоматически созданных Makefiles. Ручное редактирование Make-файлов не является вариантом. –

+0

@MattB: Ох ... забыли об этом ... слишком поздно !!! Я знаю, что есть CMake GUI .. не так много ответа, но больше точки в направлении, чтобы увидеть, есть ли опция в CMake GUI, чтобы сделать это для вас и посмотреть, что он генерирует ... – t0mm13b

-5

Я не уверен, что понял вопрос, но ...

Может быть, вы могли бы использовать дополнительный макрос для обеспечения C флаги компилятора командной строки, например:

CFLAGS= <whatever> 
CFLAGS2= #nothing 

.c.o: 
    $(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $< 

Тогда, когда ты введите команду make, введите аргумент командной строки "CFLAGS2=xxx", который переопределяет настройку по умолчанию в make-файле.

Update

Да, я не понял вопрос, что ОП в. Так любезно пренебрегайте.

+0

@Loadmaster: Я сделал то же самое здесь, но получил вниз, так как я не понимаю вопрос OP - он сказал «когда make (not cmake) исполнен?» ... – t0mm13b

+1

Вопрос о cmake , CMake генерирует make-файл на платформе linux, поэтому я не могу напрямую его модифицировать. –

+0

@ Lukasz Lew: Ahh .... неудивительно ... я получил downvoted ... lol ... – t0mm13b

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