【问题标题】:Magick++ makefile doesn't work but seemingly same command line option worksMagick++ makefile 不起作用,但看似相同的命令行选项有效
【发布时间】:2012-06-11 10:42:44
【问题描述】:

我一直在使用 makefile 来编译程序,而我刚刚开始使用 image magick 库,我显然做错了。

我添加的行是:Magick++-config --cppflags --cxxflags --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

编译并且工作正常。我在这里错过了什么?

【问题讨论】:

  • 在完全相同的环境中给出完全相同的命令会产生完全相同的结果(不受竞争条件的影响)。所以有些东西必须是不同的。不幸的是,我们无法确定,因为您没有提供 make 运行的相关输出。在任一环境中检查 Magick++-config 的输出也可能会有所帮助。

标签: c++ makefile g++ imagemagick


【解决方案1】:

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

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

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

【讨论】:

  • ls /usr/include | grep "mag" 给出: ImageMagick Magick++-config --cppflags --cxxflags --ldflags --libs 给出: bash: -I/usr/include/ImageMagick: 没有这样的文件或目录 所以这就是我从 shell 得到的 .. 我不知道如何修改 makefile为了回显命令输出,我尝试但遇到了语义错误。
  • @jett:评论不是发布任何内容的好地方。最好修改你的问题。我看到您的Magick++-config 的输出产生“-I/usr/include/ImageMagick”,这正是您的编译器需要而不是在第 15 行的反引号中的相应Magick++-config 调用你的 Makefile。但这是一个杂牌;要真正解决问题,您应该找出为什么 Makefile 中的反引号替换不会产生与命令行上直接调用相同的输出。 (当您使用它时,请阅读反引号的实际作用,因为您的评论表明您应该......)
  • @jett:我现在的猜测是你扩展了你的 PATH 变量以包含带有 Magick++-config 的目录,但没有 export 那个 PATH,所以你的 Makefile 没有找到Magick++-config 首先。如果是这种情况,您的make 输出中应该有一条关于它的错误消息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多