簡體   English   中英

使用OpenMP的Makefile:無法將-o與-c,-S或-E指定給多個文件

[英]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.olateral.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.

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