2010-06-29 3 views
2

У меня есть огромный проект, написанный на языке C, и у меня есть один файл make, который используется для его компиляции. Файлы проекта C содержат множество проблем с заглавными заголовками в его заголовочных файлах, то есть есть тоны файлов заголовков, которые были пропущены во многих файлах C. Проблема заключается в том, что мне нужно перенести этот проект на компиляцию на Linux-машине, и поскольку Linux чувствителен к регистру, я получил тоны ошибок.сделать файл на Linux - как игнорировать регистр?

Есть ли элегантный способ, с помощью которого я могу запустить файл в Linux и сказать ему игнорировать регистр, чувствительный к регистру? Любое другое решение также будет приветствоваться.

Большое спасибо. Motti.

+5

Это плохой вопрос, и вы должны чувствовать себя плохо, спрашивая его. –

+2

Почему бы просто не исправить Makefile? Создайте небольшой скрипт на языке ваших вариантов, который соответствует Makefile-Entries, в их правильные копии, заменит их и сохранит файл ... тогда вы решили проблему навсегда. И исправление записей ничего не сломает на платформе без учета регистра – flitzwald

+0

, почему бы не повредить регистр везде ...? вы знаете имя заголовка, делаете список, выполняете поиск (без учета регистра) для каждого имени в make-файлах, источниках, других заголовках, где бы они ни находились, и заменяете нужное имя файла ... – ShinTakezou

ответ

1

Вы можете монтировать файлы в файловой системе без регистра. FAT приходит на ум. ntfs-3g, похоже, не поддерживает это.

+1

Нет. ntfs-3g на linux чувствителен к регистру. Вы можете легко создать «File.txt» и «file.txt» и одну и ту же папку, и вы не сможете получить доступ к одному из них на машине Windows. http://www.tuxera.com/community/ntfs-3g-faq/#posixfilenames1 – SigTerm

+0

Вы правы - я неправильно читаю справочную страницу. Я только что исправил это (так что ваш комментарий кажется странным сейчас.) Спасибо. – reinierpost

+0

какой ...?! Я заметил это с функцией автозаполнения на оболочке при доступе к разделам win, но я думал, что это «проблема» автозаполнения, делая точное совпадение ... Я не думал, что это реальная возможность fs .. если это так, т. е. ntfs не является внутренне неосведомленным к регистру, тогда должен быть способ создать файл и ФАЙЛ, а также получить к ним доступ также и в окнах (используя правильные инструменты, которые напрямую связаны с fs)! Это действительно интересно для меня! – ShinTakezou

1

Ну, я могу только сказать вам, что вам нужно изменить случай этих файлов заголовков. Я не знаю, что вы можете сделать это автоматически, но все же вы можете использовать cscope, чтобы сделать это проще.

http://www.linux-tutorial.info/modules.php?name=ManPage&sec=1&manpage=cscope

6

Вы должны исправить все вручную и переименовывать каждый файл или исправить каждое место с #include. Даже если у вас есть огромный проект (сравнимый с ядром Linux), это должно быть возможно сделать в течение часа или двух. Автоматизация может быть возможной, но ручной путь должен быть лучше - потому что скрипт не сможет угадать, какое имя является правильным - имя файла или имя, используемое в #include.

Кроме того, эта ситуация является ошибкой оригинального разработчика проекта. Если он не был небрежным и назвал каждый заголовок в каждом правильном #include, этого не произошло бы. Технически это проблема кода, аналогичная синтаксической ошибке. Единственный правильный способ справиться с этим - это исправить это.

+4

Автоматизация возможна, если вы примете правило вроде «все имена файлов заголовков должны быть полностью строчными». – caf

+0

Все строчные буквы настолько уродливые. – ern0

+2

все строчные буквы настолько хороши; если вы любите все заглавные буквы, или ThIs_WAy в порядке, но единственное важное безвкусное дело в том, что вы __must__ должны быть согласованными и писать его __always__ на sameway, даже если ваша файловая система не заботится – ShinTakezou

2

Я думаю, что для написания небольшого скрипта, который сначала проходит через каталоги, а затем заменяет заголовки C, требуется не слишком много времени. Разъясняется:

  1. Сканируйте папку заголовков и соберите имена файлов.
  2. Сделайте строчный список из них. Теперь у вас есть оригинальные и локальные пары.
  3. Сканирование исходных файлов C и поиск в каждой строке содержит «#include»
  4. В нижнем регистре.
  5. Найдите нижнее регистрационное имя в списке, собранном и нижнем, из заголовков.
  6. Замените исходную строку на собранную из заголовков.

Вы должны поместить измененные файлы в отдельную структуру папок, чтобы не переписывать весь источник с некоторыми ошибками. Не забудьте создать целевые папки во время сканирования исходного дерева.

Я рекомендую язык скрипта для этой задачи, я предпочитаю PHP, но это единственный серверный язык сценариев, который я знаю. Да, он будет работать некоторое время, но только один раз.

(Держу пари, что вы будете иметь другие проблемы с этим проектом, эта проблема не является типичным показателем высокого качества работы.)

+0

Время, затрачиваемое на сценарий написания и отладки, будет сопоставимо с временем, которое вы потратите на его исправление вручную. Кроме того, вам нужно сделать это только один раз, а не 5 раз в течение дня. IMO, создание скрипта не стоит. – SigTerm

0

Я использую найти все и заменить все функциональные возможности Source Insight, когда я должен выполнить полную замену.Но ваша проблема кажется довольно большой, но вы можете попробовать заменить каждое имя файла заголовка во всех вхождениях исходных файлов, используя функцию «Найти все» + «Заменить» . Вы можете использовать notepad ++ для того же.

0

Давным-давно был отличный инструмент под MPW (Мастерская программы для Macintosh) под названием Canon. Он использовался для текстовых файлов canonize, т. Е. Все символы, найденные в данном списке ссылок, имеют одинаковое использование верхнего/нижнего регистра. Этот инструмент идеально подходит для такой задачи - интересно, существует ли что-то подобное в Linux?

Смежные вопросы