【问题标题】:Unix command line: find different behaviour from dir to dirUnix 命令行:从 dir 到 dir 找到不同的行为
【发布时间】:2014-05-06 16:13:44
【问题描述】:

我在 makefile 中使用 find 命令,如下所示:

CC = clang++
CODE = $(shell find . -name *.cpp) #find command here !!!!!!
EXEC = tcr_translator

.PHONY: all clean

all: $(OBJECT)
    clear
    $(CC) $(CODE) -o $(EXEC) -I src/

clean:
    rm $(EXEC)

run: all
    ./tcr_translator

所以,这个 find 命令列出了所有要编译的 cpp 文件,比在我的 makefile 中硬写它们更容易。这对我的上一个项目非常有效,所以我为我的新项目采用了相同的 makefile。我的问题,现在 find 命令(即 char for char,相同的命令)不会查看我的子目录。 因此,如果我在 src/ 子文件夹中有 .cpp,它将找不到它们。

为什么这样的命令会在某个目录中运行,而不是在其他目录中运行。我真的很茫然:(

【问题讨论】:

  • 这作为makefile 不是很有用。您可以在一行 shell 脚本中获得相同的行为。使用 make 的目的是避免重做不必要的工作;如果你只是想在每次发生任何变化时重新编译所有东西,你还不如写一个脚本。

标签: unix command-line makefile find


【解决方案1】:

您应该引用*.cpp 以避免它在传递到find 之前被shell 扩展。

CODE = $(shell find . -name '*.cpp')

【讨论】:

  • 哇,它成功了……知道为什么没有引号它在我以前的项目中工作吗?无论如何,非常感谢......尽可能接受:P
  • 您的项目之间的区别在于,在您的上一个项目中,您在顶层目录中没有任何 .cpp 文件,因此 *.cpp 没有匹配任何内容,并且 shell 将其传递给find。在这个项目中,您在顶层目录中有一些 .cpp 文件,因此它匹配并且 shell 扩展它并将 -name foo.cpp 传递给 find
猜你喜欢
  • 2012-06-21
  • 2014-07-21
  • 2016-09-21
  • 1970-01-01
  • 2021-09-07
  • 2010-12-22
  • 1970-01-01
  • 2015-01-28
  • 2011-05-30
相关资源
最近更新 更多