2017-01-18 51 views
1

我正在做一些使用makefiles的練習,並注意到我試圖編譯的.cpp文件給我Permissione Denied嘗試執行相應的.out文件時出現錯誤。我也注意到使用-c指令似乎是問題所在。這是因爲當我這樣做:.out權限被拒絕使用-c指令與g ++

singleton_template_main.o: singleton_template_main.cpp singleton.h 
     g++ -c singleton_template_main.cpp -o singleton_template_main.out 

我得到的錯誤,但是當我這樣做時:

singleton_template_main.o: singleton_template_main.cpp singleton.h 
    g++ singleton_template_main.cpp -o singleton_template_main.out 

我沒有得到任何錯誤。問題是什麼?

我正在使用macOS Sierra。

回答

3

-c標誌編譯代碼(禁止鏈接),生成一箇中間目標文件 - 這是不可執行的。這也是值得注意的是,在這種情況下,輸出文件命名爲.OUT可能是不可取的,對於目標文件的約定是擴展,如的.o.OBJ

拆除-c標誌會導致編譯器根據需要編譯和鏈接代碼,從而生成可執行文件 - 因此它按預期運行。

0

看起來您錯誤地輸入了命令中的輸出文件(-o singleton_template_main.out而不是-o singleton_template_main.o)。這是更好的命令使用[email protected],爲了避免這樣的錯誤:

singleton_template_main.o: singleton_template_main.cpp singleton.h 
    g++ singleton_template_main.cpp -o "[email protected]" 

甚至

singleton_template_main.o: singleton_template_main.cpp singleton.h 
    $(COMPILE.cpp) $(OUTPUT_OPTION) $< 

您可能需要顯式鏈接爲C++,太:

singleton_template_main: LINK.o = $(LINK.cc)