Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Makefile:gcc行未显示_Gcc_Makefile - Fatal编程技术网

Makefile:gcc行未显示

Makefile:gcc行未显示,gcc,makefile,Gcc,Makefile,如果我使用make target\u name运行该行: $(CC) $(CFLAGS) $(OPTS) $(TARGET) &> gcc_log_file 我在gcc_log_文件中得到以下结果:nothing 这很奇怪,因为如果我键入make-n target\u name,行会很好地展开 我可以在gcc中添加'-v',但这将非常难看,我只想扩展gcc行 我尝试了以下解决方法 @echo "$(OBJ) $$($(CC) $(CFLAGS) $(OPTS) $(TA

如果我使用
make target\u name
运行该行:

$(CC) $(CFLAGS) $(OPTS) $(TARGET) &> gcc_log_file
我在gcc_log_文件中得到以下结果:nothing 这很奇怪,因为如果我键入
make-n target\u name
,行会很好地展开

我可以在gcc中添加'-v',但这将非常难看,我只想扩展gcc行

我尝试了以下解决方法

@echo "$(OBJ) $$($(CC) $(CFLAGS) $(OPTS) $(TARGET))" &> gcc_log_file

@printf "$(OBJ) %s\n" $$($(CC) $(CFLAGS) $(OPTS) $(TARGET)) &> gcc_log_file
执行CC行,$(OBJ)展开,但不展开CC行

我应该明确指出,我希望在makefile中这样做,因为我不想登录不是由gcc生成的gcc_log_文件行……我的makefiles非常复杂

有什么提示吗


请注意,我的gcc是一个基于gcc 5.2的特殊gcc,但我认为这种行为是相同的。

您所看到的是正常的。无论
COMMAND
是什么,
COMMAND&>FILE
执行
COMMAND
并将其标准和错误输出重定向到FILE
FILE
。但是在您的情况下,
COMMAND
是一个编译命令,如果没有错误或警告,编译器不会在stdout或stderr上打印任何内容。因此,重定向到日志文件的内容根本不算什么

您可以很容易地检查这一点:

$ echo 'int main(void) { return 0; }' > foo.c
$ gcc -o foo foo.c
$
看到了吗?没有可以发送到日志文件的任何类型的输出

而如果您
make-n
,则make(而不是您的编译器)将响应配方,它将传递给shell而不使用-n选项。如果要记录您的配方,您必须自己在另一个配方中回显它们,例如,使用
echo
命令将其shell扩展参数发送到标准输出:

target: prerequisites
    @echo "COMMAND" >> log_file
    COMMAND
例如:

foo: foo.c
    @echo '$(CC) $(CFLAGS) -o $@ $<' >> log_file
    $(CC) $(CFLAGS) -o $@ $<

当然,但(隐含的)问题是“如何在make中做到这一点?”。。。因为我不想记录每件事,只想记录GCC行。正如前面所解释的,您必须将
echo
配方添加到同一个规则中。“您的解决方案不起作用”没有多大帮助。哪种解决方案?你做了什么?你得到了什么?哪种解决方案?--你提供的唯一一个。我什么都没有,正如我帖子中的行所述。执行
echo“COMMAND”或
@echo“COMMAND”不起作用
COMPILATION = $(CC) $(CFLAGS) -o $@ $<

foo: foo.c
    @echo '$(COMPILATION)' >> log_file
    $(COMPILATION)
COMPILATION = $(CC) $(CFLAGS) -o $@ $<
ECHOCOMPILE = echo '$(COMPILATION)' >> log_file; $(COMPILATION)

foo: foo.c
    @$(ECHOCOMPILE)
$ cat Makefile
foo: foo.c
    $(CC) $(CFLAGS) -o $@ $<
$ make &> log_file
$ cat log_file
gcc -o foo foo.c