在Makefile中创建新目录后如何执行shell命令路径?

时间:2018-01-22 18:15:21

标签: java shell makefile gnu-make

我正在尝试获取变量service_SOURCES的更新路径,之后我使用makefile从jaxb生成了一些文件:

service.jar$(EXEEXT): $(service_SOURCES)
    mkdir -p bin
    xjc -d src -p gen.files ./src/resources/info.xsd
    javac -cp service_SOURCES

service_SOURCES := $(shell find ./src -name "*.java")

我正在尝试使用生成的java代码编译现有的Java代码目前,我的service_SOURCES变量找到包含我的java文件的文件夹,并将它们一起编译。我需要更新以包含新生成的java文件夹,因此它会将我的新java文件与旧的java文件一起编译。

我尝试使用&&但是shell命令仍然没有更新。如果我在终端中运行上述命令,它可以工作,但是当我在Makefile中运行它时,路径将无法正确更新。

1 个答案:

答案 0 :(得分:0)

(转而回答因为这不适合评论)

您应该了解Make运行分两个阶段 - 依赖树在第一阶段构建,规则在第二阶段运行。这意味着在配方生成文件之后运行的shell命令无法更新依赖关系树。如果你想做这样的事情(我同意@JohnBollinger,这可能不是最好的主意),你可能需要在两个makefile之间拆分你的逻辑,或者有一个自递归的makefile。无论哪种方式,您都需要生成文件,然后调用第二个makefile,然后可以根据及时的shell命令构建新的依赖树。

替代:

service.jar$(EXEEXT): _target_to_generate_java_files_
    mkdir -p bin
    xjc -d src -p gen.files ./src/resources/info.xsd
    javac -cp $$(find ./src -name "*.java")