2017-07-10 30 views
-1

我有一個項目同時具有c和cpp文件,並且我一直在使用NMake來構建。我的問題是,如果我有兩個推論規則,每個文件類型,NM與c和cpp文件的推理規則

{$(dirSrc)}.c{$(dirObj)}.obj: 
    cl /nologo /c /EHsc /Fo$(dirObj)\ $< 

{$(dirSrc)}.cpp{$(dirObj)}.obj: 
    cl /nologo /c /EHsc /Fo$(dirObj)\ $< 

$(binPath): $(dirObj)\*.obj 
    link /nologo /dll /out:$(binPath) $(dirObj)\*.obj 

只有C文件被編譯,大概是因爲.c擴展名是第一次在.SUFFIXES名單。

我當然可以簡單地將c文件的擴展名更改爲cpp,但我想知道是否有人知道有一種方法來調用這兩個規則。

+0

爲什麼要投票? –

回答

0

那麼,爲了回答我自己的問題,我能想到的最好的辦法是編譯爲2個獨立的目錄,然後在運行鏈接程序時指向兩者。

{$(dirSrc)}.c{$(dirObj)\c}.obj: 
    cl /nologo /c /EHsc /Fo$(dirObj)\c\ $< 

{$(dirSrc)}.cpp{$(dirObj)\cpp}.obj: 
    cl /nologo /c /EHsc /Fo$(dirObj)\cpp\ $< 

$(binPath): $(dirObj)\c\*.obj $(dirObj)\cpp\*.obj 
    link /nologo /dll /out:$(binPath) $(dirObj)\c\*.obj $(dirObj)\cpp\*.obj