#c #caching #compiler-construction
#c #кэширование #построение компилятора
Вопрос:
Я разрабатываю программу на C и, как ни странно, при обновлении исходных файлов я не вижу никаких изменений в результирующем исполняемом файле. Возможно ли, что gcc хранит кэшированную копию файлов, и даже если я скомпилирую, я не получу более новую версию своего исполняемого файла? В этом случае, как я могу заставить компилятор использовать недавно отредактированные файлы?
Я компилирую свой код со следующим:
# gcc -o myExecFileName source_file_1.c source_file2.c
Комментарии:
1. Какие команды вы используете для компиляции и компоновки?
2. Сохраняете ли вы файлы перед их повторной компиляцией?
3. Это зависит от того, как вы компилируете? Файлы один за другим, а затем связать все? Или отдавать gcc все файлы?
4. @Wooble gcc -o myExecFileName source_file_1.c source_file2.c @Mahesh да, я также пытался изменить название функций, но это не сработало.
5. @haunted: это
readMe
согласно вашему последнему комментарию илиmyExecFileName
согласно предыдущему комментарию.-o
Параметр togcc
задает имя двоичного файла. Это то, что вы должны вызвать.
Ответ №1:
Чтобы ответить на ваш вопрос, no gcc не будет кэшировать ваши файлы. Происходит что-то еще. Вы либо изменяете файлы в другом каталоге, как предлагает @Lee D, либо вы не сохраняете файлы перед компиляцией, или, возможно, вносимые вами изменения не определены ifdef.
Ответ №2:
Похоже, ваш makefile неисправен. make
использует время файла, чтобы определить, следует ли запускать этап компиляции. Тем не менее, у вас должны быть свои зависимости, чтобы это работало правильно.
Наблюдайте:
hello: hello.c
$(CC) hello.c -o hello
В первой строке hello: hello.c
означает посмотреть на временную метку в файле hello.c
, и если она старше, чем временная метка в hello
(или если hello
она не существует), затем выполнить соответствие, указанное ниже.
Комментарии:
1. Из комментариев кажется, что он даже не использует makefile.
2. Ответил до появления комментариев — но я оставляю это, потому что это наиболее вероятное полезное решение для людей, которые приходят сюда из Google.
3. Я не использовал makefile… Я попытался создать один, он компилируется, но … на самом деле ничего не изменилось. Мой компилятор сошел с ума ?!?
4. Попробуйте удалить свой старый исполняемый файл перед созданием нового. Это не должно иметь значения, но это должно сделать вашу проблему более очевидной.
Ответ №3:
Убедитесь, что вы редактируете те же файлы, которые компилируете. Если вы работаете с несколькими версиями файлов в нескольких окнах, это может быть не так. Случилось со мной на прошлой неделе.