Как я делаю простой make-файл для gcc на Linux?

Я сделал бы это как это:

get-content tmp.log -encoding Unicode | set-content new.log -encoding UTF8

Мое понимание - то, что - кодирование опции выбирает кодирование, в котором файл должен быть считан или записан.

123
задан nbro 15 May 2016 в 21:53
поделиться

5 ответов

Основываясь на вашем описании, я подозреваю, что вы говорите о скрипте, который находится внутри свойства события в теге HTML (например, onclick). В этом случае код сценария должен быть закодирован в HTML. Элайджа попал в точку.

Например:

<input type="submit" onclick="if(somevar &amp;&amp; othervar) callFunc(&quot;clicked&quot;);">

Вам не нужно делать это внутри блока .

простое решение, демонстрирующее простые концепции Makefile:

HEADERS = program.h headers.h

default: program

program.o: program.c $(HEADERS)
    gcc -c program.c -o program.o

program: program.o
    gcc program.o -o program

clean:
    -rm -f program.o
    -rm -f program

(имейте в виду, что make требует табуляции вместо отступа пробела, поэтому обязательно исправьте это при копировании)

Однако для поддержки большего количества файлов C вы должны Придется создать новые правила для каждого из них. Таким образом, для улучшения:

HEADERS = program.h headers.h
OBJECTS = program.o

default: program

%.o: %.c $(HEADERS)
    gcc -c $< -o $@

program: $(OBJECTS)
    gcc $(OBJECTS) -o $@

clean:
    -rm -f $(OBJECTS)
    -rm -f program

Я попытался сделать это как можно проще, исключив такие переменные, как $ (CC) и $ (CFLAGS), которые обычно встречаются в make-файлах. Если вам интересно в этом разобраться, надеюсь, я дал вам хорошее начало.

Вот Makefile, который я люблю использовать для исходного кода C. Не стесняйтесь использовать его:

TARGET = prog
LIBS = -lm
CC = gcc
CFLAGS = -g -Wall

.PHONY: default all clean

default: $(TARGET)
all: default

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c))
HEADERS = $(wildcard *.h)

%.o: %.c $(HEADERS)
    $(CC) $(CFLAGS) -c $< -o $@

.PRECIOUS: $(TARGET) $(OBJECTS)

$(TARGET): $(OBJECTS)
    $(CC) $(OBJECTS) -Wall $(LIBS) -o $@

clean:
    -rm -f *.o
    -rm -f $(TARGET)

Он использует возможности подстановочных знаков и patsubst утилиты make для автоматического включения файлов .c и .h в текущий каталог, что означает, что когда вы добавляете новые файлы кода в свой каталог, у вас не будет для обновления Makefile. Однако, если вы хотите изменить имя сгенерированного исполняемого файла, библиотек или флагов компилятора, вы можете просто изменить переменные.

В любом случае, пожалуйста, не используйте autoconf. Я умоляю тебя! :)

187
ответ дан 24 November 2019 в 01:16
поделиться
gcc program.c -o program

no makefile необходимо.

-12
ответ дан 21 September 2019 в 04:05
поделиться

Например, этого простого Makefile должно быть достаточно:

CC=gcc 
CFLAGS=-Wall

all: program
program: program.o
program.o: program.c program.h headers.h

clean:
    rm -f program program.o
run: program
    ./program

Обратите внимание, что в следующей строке после очистки и запуска должно быть , а не пробелы.

ОБНОВЛЕНИЕ Применены комментарии ниже

24
ответ дан 24 November 2019 в 01:16
поделиться
all: program
program.o: program.h headers.h

достаточно. остальное неявно

14
ответ дан 24 November 2019 в 01:16
поделиться

В зависимости от количества заголовков и ваших привычек разработки вы можете захотеть изучить gccmakedep. Эта программа проверяет ваш текущий каталог и добавляет в конец make-файла зависимости заголовков для каждого файла .c / cpp. Это перебор, когда у вас есть 2 заголовка и один программный файл. Однако, если у вас есть 5+ небольших тестовых программ и вы редактируете один из 10 заголовков, вы можете доверить make пересборку именно тех программ, которые были изменены вашими модификациями.

0
ответ дан 24 November 2019 в 01:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: