[英]How to fix error : g++.exe : cannot specify -o with -c or -S and multiple compilations
[英]Makefile with OpenMP: cannot specify -o with -c, -S or -E with multiple files
我的問題包括在makefile中使用OpenMP進行並行計算。 我得到的錯誤是
不能將-o與-c,-S或-E指定給多個文件
這是我的makefile:
GSLFLAGS := pkg-config --cflags gsl
LIBGSL := pkg-config --libs gsl
CFLAGS = -c -C -O3 -openmp=parallel
lateral.o:lateral.cxx
g++ -c lateral.cxx
main.o:main.cxx
g++ -c main.cxx $< ${GSLFLAGS} ${CFLAGS}
alg:main.o lateral.o
g++ -o $@ $^ ${LIBGSL}
線
g++ -c main.cxx $< ${GSLFLAGS} ${CFLAGS}
應該讀
g++ -c main.cxx ${GSLFLAGS} ${CFLAGS}
因為$<
擴展到第一個前提條件main.cxx
,從而給出g++ -c main.cxx main.cxx
。 為了避免這種情況,您甚至可以編寫通用規則,例如:
%.o: %.cxx
g++ -c -o $@ ${GSLFLAGS} ${CFLAGS} $^
而且,對於main.o
和lateral.o
不需要特殊的規則,完整的makefile將是:
GSLFLAGS := pkg-config --cflags gsl
LIBGSL := pkg-config --libs gsl
all: alg
%.o: %.cxx
g++ -c -o $@ ${GSLFLAGS} ${CFLAGS} $^
alg: main.o lateral.o
g++ -o $@ $^ ${LIBGSL}
你可以找到上面的語法的詳細說明這里還是一個更詳細的文檔在這里 。
編輯 :
抱歉我錯過了C標志,那里也有一個錯誤:
CFLAGS = -c -C -O3 -openmp=parallel
您應該刪除-c
因為您已經在規則中使用了-c
,這就是gcc
抱怨的內容。
IMO(但目前無法測試)此行有問題:
CFLAGS = -c -C -O3 -openmp=parallel
我認為-openmp=parallel
應該只是-fopenmp
。 首先是因為這是OpenMP的正確編譯標志,其次是-o
之后的內容將被解釋為輸出文件的名稱。 並且如錯誤消息所述,您不能同時使用-c
和-o
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.