【问题标题】:Using Boost with Makefile/Missing Separator使用带有 Makefile/Missing 分隔符的 Boost
【发布时间】:2014-02-03 04:18:01
【问题描述】:

我是制作文件和Boost 的新手,我正在尝试遵循this 教程,特别是Makefile4。

我只有两个源文件,分别是S1.cppmain.cpp所在的位置,和GaussQuadrature.h。现在,GaussQuadrature.h 也使用了Boost 文件,所以(据我所知)我必须告诉编译器Boost 所在的位置,即我的源文件所在的两个目录。我的makefile是

CC=g++
CFLAGS=-o2 -std=c++0x
DEPS = GaussQuadrature.h
OBJ = S1.o

%.o: %.cpp $(DEPS)
     $(CC) -c -o $@ $< $(CFLAGS)

S1: $(OBJ)
    $(CC) -o $@ $^ $(CFLAGS) S1.o -o S1 -I ../../boost_1_55_0

当我运行 make 命令时出现错误

makeS1:7: *** missing separator.  Stop.

我读过这通常是由于命令缺少标签(有趣的是,当我点击“标签”时,这两个命令在上面的缩进不同),但即使我将它们更改为

%.o: %.cpp $(DEPS)
\t$(CC) -c -o $@ $< $(CFLAGS)

S1: $(OBJ)
\t$(CC) -o $@ $^ $(CFLAGS) S1.o -o S1 -I ../../boost_1_55_0

我得到同样的错误。

除了修复此错误之外,将Boost 目录包含在makefile 中的正确方法是什么,或者有没有办法完全包含它?谢谢!

【问题讨论】:

  • 确保您的编辑器不使用真正的制表符。
  • Makefile 需要真正的标签。

标签: c++ boost makefile


【解决方案1】:

它与 Boost 无关。 Makefile 需要标签

http://www.delorie.com/djgpp/v2faq/faq22_17.html

与大多数其他在规则中的命令开头接受任何空白字符的 DOS Make 程序不同,GNU Make 坚持每个这样的行都以 TAB 开头。 (大多数其他 Unix Make 程序也需要 TAB,Posix 标准也需要它。)确保错误消息中打印的行(在本例中为第 10 行)以 TAB 开头。

【讨论】:

  • 我正在使用 emacs,什么是合适的 TAB?
  • 如果 emacs 处于“Makefile-mode”,那应该是自动的,stackoverflow.com/questions/5146621/…
  • Cool C-q TAB 工作正常,但如何进入“Makefile-mode”?我的makefile没有扩展名,有没有办法告诉emacs进入这个模式?
  • Emacs 会检查整个文件名,而不仅仅是扩展名,并且会自动为 Makefilemakefile 和任何以 .mk (IIRC) 结尾的文件使用 makefile 模式。
猜你喜欢
  • 2010-11-18
  • 1970-01-01
  • 2011-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多