【问题标题】:Command not found error in Makefile在 Makefile 中找不到命令错误
【发布时间】:2016-08-03 22:05:54
【问题描述】:

我正在尝试编写一个 Makefile。这是我写的。

CC='/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot'
IDIR =../../../include
CFLAGS=-I$(IDIR)

LDIR =../../../../../../../../.debug/lib.out/public/
LIBS= -lmylib1 -lmylib2 -lmylib3

myexec: my_code.c
    $(CC) $(CFLAGS) -o myexec my_code.c

这在运行时会抛出错误

make: /buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot: Command not found

但是,当我在终端中手动运行编译命令时,它可以工作。

export CC='/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot'
$CC -I ../../../include -L ../../../../../../../../.debug/lib.out/public/ -lmylib1 -lmylib2 -lmylib3 -o myexec my_code.c

【问题讨论】:

  • 不要在 makefile 中加上引号。
  • 并且选项应该在CFLAGS,而不是CC
  • 感谢您的建议。删除引号有帮助。另外,我链接库的方式是否正确?
  • 在终端中运行 '/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot' 会发生什么?

标签: c linux gcc makefile


【解决方案1】:

Makefile中的定义改成这样:

CC=/buildtools/toolchain/wr-x86/3.0FCScg/bin/i586-wrs-linux-gnu-gcc --sysroot=/buildtools/toolchain/wr-x86/3.0FCScg/sysroot

使用引号,make 使用整个定义作为要查找的可执行文件的名称。

Makefile 之外定义CC 时它起作用的原因是shell 和Makefile 处理引号的规则不同。

更常见的约定是对所有编译标志使用CFLAGS。事实上,我强烈建议您将Wall -W 添加到您的CFLAGS 定义中。

关于库,您应该在ccld 命令行上的源文件和目标文件之后展开$LIBS

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-09
    • 2016-03-24
    • 2016-07-12
    • 2016-11-02
    • 1970-01-01
    相关资源
    最近更新 更多