2014-03-06 17 views
0

我有一個需要使用nmake和微軟編譯器編譯的C工程。該項目的結構是:用nmake和微軟編譯器構建一個多目錄工程

project_root 
|-- parser 
| |-- parser.tab.c 
| |-- Makefile 
|-- hashtable 
| |-- hash_table.h 
| |-- hash_table.c 
| |-- Makefile 
|-- Makefile 
|-- main.c 
|-- shell.c 
|-- shell.h 

該項目的Makefile文件包含的規則來構建子項目解析器和 哈希表中的每個相應的目錄。從主 的Makefile相關摘錄:

CFLAGS=/W3 /EHsc /nologo /Iparser /Ihashtable 

all: build 

run: build 
    .\$(EXE) 

build: $(EXE) 

$(EXE): shell.obj parser\parser.tab.obj hashtable\hash_table.obj 
    $(CC) /Fe$(EXE) $** 

shell.obj: shell.c 
    $(CC) $(CFLAGS) /c shell.c 

parser.tab.obj: parser 

hash_table.obj: hashtable 

hashtable: 
    cd hashtable && nmake 

parser: parser\parser.tab.c parser\parser.yy.c 
    cd parser && nmake build_lex 

Makefile文件的哈希表包含:

hash_table.obj: hash_table.c hash_table.h 
    $(CC) $(CFLAGS) /c hash_table.c 

當在哈希表目錄中運行NMAKE的任何錯誤或警告, 但是當我運行NMAKE在主項目目錄中,有如下所示的大量錯誤 :

hashtable \ hash_table.h(24):錯誤C2059:語法錯誤:'常量'

散列表\ hash_table.h(29):錯誤C2143:語法錯誤:缺少 ')' '*'

散列表\ hash_table.h(29)之前:錯誤C2143:語法錯誤:缺少 '{' 之前'*'

散列表\ hash_table.h(29):錯誤C2059:語法錯誤: ')'

散列表\ hash_table.h(59):錯誤C2061:語法錯誤:標識符 'equal_func'

散列表\ hash_table.h(60):錯誤C2059:語法錯誤:'}'

哈希表\ hash_table.h(63):錯誤C2143:語法錯誤:缺少 '{' 前 '*'

散列表\ hash_table.h(63):錯誤C2146:語法錯誤:缺少 ')' 前標識符'EF'

哈希表\ hash_table.h(63):錯誤C2081: 'equal_func':名稱正式參數列表非法

哈希表\ hash_table.h(63):錯誤C2061:語法錯誤:標識符「 ef'

hashtable \ hash_table.h(63):error C2059:syntax error:';'

散列表\ hash_table.h(63):錯誤C2059:語法錯誤: ')'

散列表\ hash_table.h(64):錯誤C2143:語法錯誤:缺少 ')' 前 '*'

散列表\ hash_table.h(64):錯誤C2143:語法錯誤:缺少 '{' 前 '*'

散列表\ hash_table.h(64):錯誤C2059:語法錯誤: ')'

而hash_table.h中的相關行是:

21 /* Boolean data type */ 
22 typedef enum boolean 
23 { 
24 FALSE = 0, 
25 TRUE 
26 } boolean_t; 
27 
28 typedef unsigned int (*hash_func)(const char *str, unsigned int hash_len); 
29 typedef boolean_t (*equal_func)(const char *str1, const char *str2); 

53 typedef struct hashtable 
54 { 
55  /* 
56  * Some code 
57  * 
58  */ 
59  equal_func eq_fun; 
60 } hashtable_t; 

是什麼問題?代碼有問題或與makefile有關的問題?

注:

  1. 相同的結構工程使用gcc和GNU make。

  2. 沒有選項來構建項目在Visual Studio

  3. 沒有選項從Hashtable和解析器目錄複製文件是 主項目目錄。

  4. 重命名哈希表和解析器目標不能解決問題。

回答

0

儘管你沒有真正給予足夠的信息讓某人正確回答,這就是爲什麼它一直未得到答覆的原因,但我可以看到問題可能存在的一些方面。

您可能已經對導致問題的原因做出了結論,並且通過給出「相關摘錄」,您有隱藏的信息,我們需要重現問題並找到答案。

例如,當你這樣做:

parser: parser\parser.tab.c parser\parser.yy.c 
    cd parser && nmake build_lex 

您不必在目錄parser.yy.c。我們沒有看到有關如何彈性和野牛被稱爲的信息。我發現很多人在構建flex和bison程序時出現錯誤,方法是將include包含在* .l和* .y文件的錯誤位置,或者沒有注意到flex和bison源文件中存在導致錯誤代碼的錯誤產生。這些原因在我們可以去查看makefile之前需要被消除。

這個班是否應該請教導師?