c++ - Makefile 与 OpenMP : cannot specify -o with -c, -S 或 -E 与多个文件

标签 c++ c openmp

我在生成文件中使用 OpenMP 进行并行计算时遇到问题。我得到的错误是

不能为多个文件指定 -o 和 -c、-S 或 -E

这是我的生成文件:

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}

您可以在here 上找到语法的详细解释。或更详细的文档 here .

编辑:

抱歉,我错过了 cflags,那里也有一个错误:

CFLAGS = -c -C -O3 -openmp=parallel

你应该删除 -c因为你已经在规则中使用它了,这就是 gcc正在提示。

关于c++ - Makefile 与 OpenMP : cannot specify -o with -c, -S 或 -E 与多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16169560/

相关文章:

c++ - OpenCV 将 ROI 外的像素设置为 ROI 内最近的像素值

c - 在 C 中返回指针

c - 我的 LinkedList 结构在 C 中无法运行

c - OpenMP 在 for 循环中并行化代码

c++ - 如何清理复杂的 QList?

c++ - 防止 C++(或 C++0x)中的 header 爆炸

c++ - 成员函数指针c++

c - 这是一个有效的 C 程序吗?

c++ - 如何将 3 个嵌套循环重写为一个循环?

c - 完成后将openmp线程返回到单线程