Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Magick++;makefile不';不起作用,但似乎相同的命令行选项起作用_C++_Makefile_G++_Imagemagick - Fatal编程技术网

C++ Magick++;makefile不';不起作用,但似乎相同的命令行选项起作用

C++ Magick++;makefile不';不起作用,但似乎相同的命令行选项起作用,c++,makefile,g++,imagemagick,C++,Makefile,G++,Imagemagick,我一直在使用makefile来编译程序,我刚刚开始使用imagemagick库,显然我做错了什么 我添加的行是:Magick++-config--cppflags--cxflags--ldflags--libs 这是我的makefile,在运行make时,我被告知(链接器?)找不到Magick++.h CFLAGS = -g -fPIC SOURCES= $(wildcard *.cpp) OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES)) TARGET=

我一直在使用makefile来编译程序,我刚刚开始使用imagemagick库,显然我做错了什么

我添加的行是:
Magick++-config--cppflags--cxflags--ldflags--libs

这是我的makefile,在运行make时,我被告知(链接器?)找不到Magick++.h

CFLAGS = -g -fPIC

SOURCES= $(wildcard *.cpp)

OBJECTS=$(patsubst %.cpp, %.o, $(SOURCES))

TARGET=$(lastword $(subst /, ,$(realpath .)))

LINKS= -lcprocessing -lglut -lGLU -lGL

all: $(TARGET)
    @echo $(TARGET) built

$(TARGET): $(OBJECTS)
    @g++ $(CFLAGS) $(LINKS) -o $@ $(OBJECTS) `Magick++-config --cppflags --cxxflags --ldflags --libs`

clean:
    rm -rf $(OBJECTS) $(TARGET)
但是,运行:

g++ -lcprocessing -lglut -lGLU -lGL `Magick++-config --cppflags --cxxflags --ldflags --libs` Spot.cpp -o Spot

编译并运行良好。这里我遗漏了什么?

Magick++-config的输出很可能在Makefile和控制台上有所不同(因为该输出应该为编译器提供适当的选项,比如在哪里找到头文件)

修改Makefile,使其打印来自
Magick++-config
(使用您提供的选项)的输出,并将其与您在命令行上获得的输出进行比较


如果您正在寻找快速修复方法,请手动将backticks中的命令替换为您在命令行上获得的(显然是功能性的)输出。

在完全相同的环境中给出的完全相同的命令会产生完全相同的结果(无法承受竞争条件)。所以有些事情必须有所不同。不幸的是,我们无法真正判断,因为您没有给出
make
运行的相关输出。在这两种环境中检查
Magick++-config
的输出也可能有帮助。ls/usr/include | grep“mag”给出:ImageMagick
Magick++-config--cppflags--cxflags--ldflags--libs
给出:bash:-I/usr/include/ImageMagick:没有这样的文件或目录,所以这是我从shell中得到的。。我不知道如何修改makefile以响应命令输出,我尝试过,但遇到了语义错误。@jett:注释不是发布任何输出的好地方。最好修正你的问题。我看到
Magick++-config
的输出产生“-I/usr/include/ImageMagick”,这正是编译器所需要的,而不是Makefile第15行中相应的
Magick++-config
调用反勾号。但这是一个难题;要真正解决这个问题,您应该了解为什么Makefile中的backtick替换不会产生与命令行上的直接调用相同的输出。(此时,请仔细阅读backticks的实际功能,正如您的评论所指出的那样…@jett:我猜想您扩展了PATH变量,将目录中包含
Magick++-config
,但没有导出该路径,因此,您的Makefile首先找不到
Magick++-config
。如果是这种情况,则在
make
输出中应该有一条关于它的错误消息。