Два файла .c имеют одинаковые параметры компиляции - VC ++ не сообщает об ошибке и не компилирует один из них - PullRequest
5 голосов
/ 24 февраля 2010

Я пытаюсь скомпилировать набор файлов .c из проекта с открытым исходным кодом в статическую библиотеку. Я создал файл проекта VC ++ 9, настроил все как обычно. Я добавляю два .c файла в проект. У них нет специальных настроек компиляции - все настройки установлены на уровне проекта и установлены по умолчанию, за исключением того, что я отключил предварительно скомпилированные заголовки.

Я нажимаю «Построить проект» - VC ++ говорит «Готово», два файла .obj и файл .lib созданы, но функции из одного из файлов .c отсутствуют в результирующем файле .lib.

Если я добавлю #error в самом начале одного из двух файлов, VC ++ прекращает компиляцию и создает отчеты. Но если я сделаю то же самое с другим файлом, он просто тихо компилируется и не сообщает об ошибке, поэтому он явно не компилирует файл, и поэтому функции не попадают в файл .lib.

Теперь я предполагаю, что если я добавлю некоторый текст (например, #error) в качестве первой строки файла .c, компилятор увидит его независимо от настроек препроцессора, параметров компилятора и т. Д. Тем не менее, у меня есть файл log.c:

#error
whatever text follows

и отчеты Visual C ++:

1>------ Build started: Project: MyProject, Configuration: Debug Win32 ------
1>Compiling...
1>log.c
1>Build log was saved at "file://whatever\Debug\BuildLog.htm"
1>MyProject - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

Что происходит с компилятором и как мне заставить его передумать?

Ответы [ 3 ]

2 голосов
/ 24 февраля 2010

Компилятор может подумать, что объектный файл обновлен до исходного кода. Будет ли временная метка одного из объектных файлов в будущем?

1 голос
/ 24 февраля 2010

Если вы скомпилируете его по правому клику, а затем соберете проект, найдет ли компоновщик функции и поместит их в библиотеку.

1 голос
/ 24 февраля 2010

Перейдите в меню Build | Configuration.

Проверен ли проект для сборки в вашей текущей конфигурации?

Также проверьте это:

Щелкните правой кнопкой мыши файл .c (или .obj) и перейдите в свойства. В конфигурации Properties -> General убедитесь, что для Excluded From Build установлено значение No

Также проверьте, возможно ли сборка через make-файл?

Вы также можете проверить метку времени второго файла .c. Возможно, это произойдет в будущем, поэтому VC ++ не обнаруживает изменений и, следовательно, не требует перекомпиляции.

...