簡體   English   中英

帶pthread的Makefile無法在多個版本中正確編譯

[英]Makefile with pthread won't compile properly with multiple versions

對於一個項目,我必須為源代碼創建一個簡單的makefile,其中包括pthreads和命令行參數(如果要包括在內)。

無效的makefile的第一個版本是這樣的:

 mr: mr.o
    g++ -std=c++11 -pthread mr.o -o mr
 mr.o: mapred.cc
    g++ -std=c++11 -pthread -c mapred.cc
 clean:
    rm *.o mr

並且出現以下錯誤,該目標文件不存在? 在此處輸入圖片說明

因此,我決定翻轉一下前兩個語句:

mr.o: mapred.cc
   g++ -std=c++11 -pthread -c mapred.cc 
mr: mr.o
   g++ -std=c++11 -pthread mr.o -o mr 
clean:
   rm *.o mr

它可以編譯嗎? 我在終端中得到的是:

g++ -std=c++11 -pthread -c mapred.cc

沒別的。 當我查看創建了哪些文件時,我看到的只是創建了一個新文件mapred.o ,但沒有可執行文件。 因此沒有錯誤,但沒有完全完成。 如果你們有任何幫助我的提示,將不勝感激。 謝謝!

如果未使用-o選項指定顯式的輸出名稱,則編譯器將命名與源文件相同的目標文件,但后綴為.o

在您的情況下,命令

g++ -std=c++11 -pthread -c mapred.cc

將創建一個名為mapread.o的對象文件。

mapread.o用作目標名稱以及進行鏈接時,或者使用-o選項:

g++ -std=c++11 -pthread -c mapred.cc -o mr.o

至於第二個問題,除非在調用make時指定了顯式目標,否則它將僅使用第一個目標,而不會使用其他任何目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM