2013-03-12 99 views
11

首先,我幾乎是一個初學者,所以我不知道如何解釋我需要什麼,但我會試一試。 (我搜索,但無法找到完整的答案)。C - 如何將自己的頭文件保存在單獨的文件夾中

我正在學習C,並使用代碼塊。

我想創建我自己的自定義函數的迷你庫,以在我的程序中使用。

我有一個名爲「C」的文件夾。在「C」裏面,我有一個名爲「Exercises」的文件夾,我在這裏做了一本書中的所有小項目。

在「C」裏面,我想要另一個名爲「MyC」的文件夾,其中我將保留自己的頭文件和包含我的自定義函數實現的.c文件。 例如,這些h和.C將被保存在 「MYC的」:那麼現在

//test.h

#ifndef _TEST_H 
#define _TEST_H 

int mySum(int, int); 

#endif // _TEST_H 

//test.c

#include <stdio.h> 
#include "test.h" 

int mySum(int a, int b) 
{ 
    return a + b; 
} 

,什麼我試圖做的是能夠在「練習」中創建一個新項目,而不必將test.h和test.c的副本帶入項目中,而只需#include test.h並執行例如:

// testM ain.c

#include <stdio.h> 
#include <test.h> 

int main(void) 
{ 
    printf("\n2 + 1 = %d", mySum(2, 1)); 

    return 0; 
} 

我知道<>是標準的頭,但報價是在當前文件夾頭,這是我不想要什麼。

可以做到這一點嗎?怎麼樣?

我已閱讀有關進入設置>編譯器和搜索目錄添加我有標題,但沒有工作的路徑。它給了我一個錯誤「未定義的引用'mySum'」 我試過引號和#括號括號。

你們可以請一步一步來說明需要做什麼才能做到這一點嗎?

+0

聽起來像你沒有鏈接C文件。 – 2013-03-12 17:22:13

+0

由於鏈接程序無法找到「MyC」中幾個符號的定義,因此會出現鏈接器錯誤。你是否爲你的'MyC'目錄中的所有文件建立了一個庫?也看起來你正在使用一些IDE進行編譯。是這樣嗎?你打算直接使用命令行'gcc'嗎? – Tuxdude 2013-03-12 17:24:02

+0

我對代碼塊並不熟悉,但通常需要設置包含路徑,並將它添加到項目中(除非要製作庫 - 但這可能太複雜)。您需要閱讀IDE文檔,特別注意「包含文件」和「添加外部代碼」或一些類似主題。 – Arkadiy 2013-03-12 17:26:10

回答

1

你已經添加了頭文件夾,所以沒關係。正常情況下,您可以#include。如果無法找到您的標題,您會收到'文件未找到'錯誤。

但是,您還需要鏈接到此目錄中的目標代碼,並且您需要指定要搜索的函數的目標文件。 IDE中應該有一個設置來添加編譯器選項,例如../MyC/test.o。如果您尚未編譯這些函數中的代碼,則需要改爲指定.c文件。

+0

感謝這有助於。我得到它的工作是這樣的:在全局設置,包括我的標題的路徑,然後在項目設置上,鏈接器設置包括.o文件的路徑 – Kaiser 2013-03-12 21:31:31

+0

@Kaiser:恰恰是正確的做,很高興它的工作。 – teppic 2013-03-12 21:34:44

3

編譯時需要包含-I選項。例如:

gcc -I<path-to-headers> <path-to>/test.c testMain.c -o test_driver 
+1

儘管這個答案告訴我們如何指定包含路徑,但它並不回答OP的錯誤「undefined reference to something」 - 這是一個鏈接器錯誤。 – Tuxdude 2013-03-12 17:25:15

+0

固定,應該更完整 – Mosby 2013-03-12 17:27:35

0

考慮到 「fodler_to_code」 包含test.htest.c

您可以添加使用gcc的命令包括文件夾:

gcc -I fodler_to_code folder_to_code/test.c testMain.c -Wall -o program.exe

這種方式,您可以添加#include "test.h"到代碼沒有問題。

6

頁眉

如果你想搬回一個文件夾,這樣做:#include "../something.h"

在你的情況,只是這樣做:#include "../MyC/test.h"

..僅僅意味着回去一個目錄

如果你不喜歡做這樣的,或者你想簡單#include "test.h",則可以使用-I編譯參數做到這一點,就像這樣:

-I'../MyC/'

爲C文件

你需要在編譯器參數中做一個相似的事情。

gcc testMain.c ../MyC/test.c

請記住,..意味着回去一個目錄

相關問題