2008-12-04 59 views
2

我有一個問題涉及如何在各種環境中解釋相對路徑。 如果我一定要在使用的Makefile和gcc編譯Linux的一個C代碼,如果一些源文件有:在linux上的相對路徑解釋-gcc env

fopen(「../../xyz.ctl」, 」r」); 

應該在哪裏這個文件來定位。或者換句話說, 如果我有

fopen(「xyz.ctl」 , 」r」); 

將編譯器查找xyz.ctl在同一文件夾中: - 。

a)如果有這種說法的fopen源文件是否存在?

b。)哪裏有makefile?

c。)哪裏會生成linux可執行文件?

我知道MSVC所有相對路徑都來自具有* .dsw(工作區文件)的文件夾。對於RVDS環境,它從生成可執行文件* .axf的文件夾開始。

-AD

+0

爲什麼編譯器會調用fopen?你的代碼調用了這個。 – leppie 2008-12-04 10:18:19

回答

5

你的Makefile會調用編譯你的包含fopen()的代碼的gcc。 執行新編譯的代碼時會調用fopen()。啓動程序時,路徑與您當前的工作目錄相關。

1

通過任何Unix工具編譯的代碼中的路徑相對於在其中執行最後的可執行路徑。

gcc並沒有試圖理解你所做的事情,也沒有分析你編譯到應用程序中的路徑。

據我所知,Windows複製命令是唯一的命令,它試圖「修復」它的工作應用程序中的路徑。 (故事:我在軟盤上有一個VB應用程序,當我將它複製到C:時,文件的校驗和已經改變。差異表明將應用程序複製到磁盤將在應用程序中將「C:\」替換爲「答:\「反之亦然)。