Подтвердить что ты не робот

Как определить флаги компилятора во время компиляции с помощью CMake?

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

4b9b3361

Ответ 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 файле.

Обновление

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