C Makefile-使用正则表达式导出

C Makefile-使用正则表达式导出,c,github,makefile,git-submodules,C,Github,Makefile,Git Submodules,我正在从事C项目XYZ。该项目依赖于另一个C项目ABC。所以,要为XYZ制作,我们必须先为ABC制作。为此,我首先将ABC作为子模块添加到XYZ,如下所示 git submodule add git@github.com:username/ABC.git git add .gitmodules git add ABC git push 因此,要构建我的XYZ项目,首先需要构建ABC。因此,我在XYZ项目中的makefile如下所示: ifndef PRT PRT=ABC e

我正在从事C项目XYZ。该项目依赖于另一个C项目ABC。所以,要为XYZ制作,我们必须先为ABC制作。为此,我首先将ABC作为子模块添加到XYZ,如下所示

git submodule add git@github.com:username/ABC.git  
git add .gitmodules  
git add ABC  
git push
因此,要构建我的XYZ项目,首先需要构建ABC。因此,我在XYZ项目中的makefile如下所示:

ifndef PRT  
PRT=ABC  
export PRT  
endif

.PHONY: project_ project_clean project_check clean XYZ_package package check

project_ project_clean project_check:  
        @echo "(MAKE) -C src -s $(@:project_%=%)"  
        @$(MAKE) -C src -s $(@:project_%=%)  

clean: project_clean

XYZ_package package:  
        ./scripts/package.sh
check: project_check
(MAKE) -C src -s   
make: *** ABC: No such file or directory.  Stop.  
make[1]: *** [all] Error 2  
make: *** [project_] Error 2  
这在本地运行,但当我尝试在github中构建它时,它失败了。因为在github中,文件夹是
XYZ@324354
。它显示如下错误:

ifndef PRT  
PRT=ABC  
export PRT  
endif

.PHONY: project_ project_clean project_check clean XYZ_package package check

project_ project_clean project_check:  
        @echo "(MAKE) -C src -s $(@:project_%=%)"  
        @$(MAKE) -C src -s $(@:project_%=%)  

clean: project_clean

XYZ_package package:  
        ./scripts/package.sh
check: project_check
(MAKE) -C src -s   
make: *** ABC: No such file or directory.  Stop.  
make[1]: *** [all] Error 2  
make: *** [project_] Error 2  

如何将
PRT变量设置为正确的路径,使其始终指向正确的文件夹

您的问题并不十分清楚(如果您提供一个显示真实目录名等的具体示例,会简单得多。)

但我认为,根据你的评论,类似的事情可能会奏效:

ifndef PRT
PRT := $(wildcard sub-project*)
endif
export PRT

那么这个变量表示要构建到的文件夹?我想你可以再澄清一点…请显示你为得到这个错误而执行的确切命令。此外,您还应该从makefile配方中删除所有
@
前缀,至少在它正常工作之前是这样。最好不要使用它们,而是使用类似于控制它的东西。这里的“问题”在
src
子目录中的makefile中,您根本没有向我们显示它,因此无法知道发生了什么。您在
src
子目录中调用sub make有效,然后该调用将打印此错误。它仍然会给出相同的错误。请检查我编辑的问题版本