gcc и кэширование

#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 Параметр to gcc задает имя двоичного файла. Это то, что вы должны вызвать.

Ответ №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:

Убедитесь, что вы редактируете те же файлы, которые компилируете. Если вы работаете с несколькими версиями файлов в нескольких окнах, это может быть не так. Случилось со мной на прошлой неделе.