add_definitions добавляет определение, которое фиксируется во время выполнения cmake (not make). Как определить их при выполнении make (not cmake)? Значение определения будет выводить пользовательскую команду.
Как определить флаги компилятора во время компиляции с помощью CMake?
Ответ 1
Здесь вы можете найти полезные трюки: Как запустить команду во время компиляции в Makefile, сгенерированном CMake?
Ответ 2
Вот пример файла make:
.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
. Прокомментируйте другое в зависимости от того, выполняете ли вы отладочную или выпускную сборку.
Вышеприведенный пример предназначен для файла make из моего учебного пособия для создания исполняемого файла под названием myapp
, который состоит из mysource.c
, myroutines1.c
и myroutines2.c
. И это показывает, как make достаточно интеллектуальный, чтобы создать исполняемый файл без перекомпиляции.
Примечание. Файл makefile имеет ориентацию unix/linux и очень строгий на вкладках/пробелах, которые не отображаются в приведенном выше примере!
Надеюсь, это поможет, С наилучшими пожеланиями, Том.
Ответ 3
Я не уверен, что понимаю вопрос, но...
Возможно, вы могли бы использовать дополнительный макрос для предоставления флагов компилятора командной строки C, например:
CFLAGS= <whatever>
CFLAGS2= #nothing
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
Затем, когда вы выдаете команду make
, укажите аргумент командной строки "CFLAGS2=xxx"
, который переопределяет настройку по умолчанию в make файле.
Обновление
Да, я не понял вопрос ОП. Так любезно пренебрегайте.