2010-06-29 71 views
2

我有一個龐大的項目,整個用C語言編寫,我有一個用於編譯它的make文件。項目C文件在其頭文件中包含大量大寫問題,這意味着在大量C文件中拼寫錯誤的頭文件的音調。 問題是我需要將此項目遷移到Linux機器上進行編譯,並且由於Linux區分大小寫,所以出現了錯誤。使文件在Linux上運行 - 如何忽略大小寫?

有沒有一種優雅的方式,我可以在Linux中運行make文件並告訴他忽略區分大小寫? 任何其他解決方案也將受到歡迎。

非常感謝。 Motti。 Motti。

+5

這是一個不好的問題,你應該感到不好。 – 2010-06-29 07:43:56

+2

爲什麼不直接修復Makefile?用你選擇的語言編寫一個小腳本,將Makefile-Entries與正確的對應文件相匹配,替換它們並保存文件...然後你解決了這個問題。並糾正條目不會打破任何不區分大小寫的平臺 – flitzwald 2010-06-29 07:57:00

+0

爲什麼不在任何地方修復案例......?您知道標題名稱,執行列表,搜索(不區分大小寫)每個名稱到makefile,源代碼,其他標題,以及替換正確的文件名... – ShinTakezou 2010-06-29 09:30:53

回答

1

可以將文件掛載到不區分大小寫的文件系統上。發現FAT。 ntfs-3g似乎不支持這一點。

+1

不是。 linux上的ntfs-3g區分大小寫。您可以輕鬆創建「File.txt」和「file.txt」和相同的文件夾,並且您將無法在Windows計算機上訪問其中的一個文件夾。 http://www.tuxera.com/community/ntfs-3g-faq/#posixfilenames1 – SigTerm 2010-06-29 08:11:09

+0

你是對的 - 我誤讀了手冊頁。我剛剛糾正了這一點(所以你的評論現在似乎很奇怪。)謝謝。 – reinierpost 2010-06-29 08:22:46

+0

什麼...?!我注意到它具有shell上的自動完成功能,當訪問win分區時,但我認爲這是自動完成的一個「問題」,完全匹配......我並不認爲這是fs的真正可能性。 。如果是這樣的話,也就是說ntfs不是內在的case-ignorant,那麼必須有一種方法來創建File和FILE,並且也可以在windows上訪問它們(使用正確的工具來處理「直接」與fs)!這對我來說真的很有趣! – ShinTakezou 2010-06-29 09:27:47

6

你必須修復用手一切,重命名每個文件或修復的#include與每一個地方。即使你有一個巨大的項目(與Linux內核相媲美),應該可以在一兩個小時內做到這一點。自動化可能是可能的,但手動方式應該更好 - 因爲腳本將無法猜測哪個名稱是正確的 - 文件名或#include中使用的名稱。

此外,這種情況是原始項目開發人員的錯。如果他/她不是馬虎,並且正確地命名了每個#包括的每個標題,則這不會發生。從技術上講,這是一個類似於語法錯誤的代碼問題。解決這個問題的唯一正確方法就是修復它。

+4

如果您採用像「所有標題文件名應完全小寫」的規則,自動化是可能的。 – caf 2010-06-29 08:40:04

+0

全小寫字體非常難看。 – ern0 2010-06-29 09:16:29

+2

全部小寫字母都很好;如果你喜歡所有的大寫字母,或者ThIs_WAy沒問題,但唯一重要的無味問題是你__必須連貫一致並且同樣寫下__always__,即使你的文件系統不關心 – ShinTakezou 2010-06-29 09:24:36

2

我認爲編寫一個小腳本不需要太長的時間,它先通過目錄,然後替換C標頭。解釋:

  1. 掃描標題的文件夾並收集文件名。
  2. 製作它們的小寫列表。你現在有原始和定位對。
  3. 掃描C源文件並查找每行包含「#include」
  4. 小寫它。
  5. 在從頭文件收集並縮小的列表中查找小寫字母文件名。
  6. 將源代碼行替換爲從頭文件中收集的代碼行。

你應該把修改後的文件放到一個單獨的文件夾結構中,避免用一些錯誤的東西覆蓋整個源文件。不要忘記在源碼樹掃描期間創建目標文件夾。

我推薦一個用於該任務的腳本語言,我更喜歡PHP,但它只是我知道的唯一的服務器端腳本語言。是的,它會運行一段時間,但只有一次。

(我敢打賭,你將有與該項目的其他困難,這個問題是不是高質量的工作典型的指標。)

+0

您將花費時間編寫和調試腳本的時間將與您花時間手動修復花費的時間相當。另外,你只需要做一次,而不是每天5次。國際海事組織,製作腳本是不值得的。 – SigTerm 2010-06-29 12:32:54

0

我用的是找到所有和替換來源洞察的所有功能時,我必須做完整的替換。但是你的問題似乎很大,但你可以嘗試使用 「全部查找」+「替換」功能來替換所有源文件中的每個頭文件名。你也可以使用notepad ++來做同樣的事情。

0

很久以前,在MPW(Macintosh Programmer's Workshop)中有一個很棒的工具叫做Canon。它被用於canonize文本文件,即使得在給定參考列表中找到的所有符號具有大寫/小寫的相同用法。這個工具對於像這樣的任務是理想的 - 我想知道在Linux下是否有類似的東西存在?