Chr*_*son 111 makefile gnu-make
我收到一些意外的结果从另一个调用一个makefile.我有两个makefile,一个叫/path/to/project/makefile,一个叫/path/to/project/gtest-1.4.0/make/Makefile.我试图让前者称之为后者.在/ path/to/project/makefile中,我有
dev: $(OBJ_FILES)
$(CPPC) $(LIBS) $(FLAGS_DEV) $(OBJ_FILES) -o $(BIN_DIR)/$(PROJECT)
$(MAKE) -f ./gtest-1.4.0/make/Makefile
clean:
rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
rm -f ../svn-commit.tmp~
rm -f $(BIN_DIR)/$(PROJECT)
make -f gtest-1.4.0/make/Makefile clean
Run Code Online (Sandbox Code Playgroud)
在/path/to/project/gtest-1.4.0/make/Makefile我有
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
Run Code Online (Sandbox Code Playgroud)
发布以下内容:
cd /path/to/project
make
Run Code Online (Sandbox Code Playgroud)
输出:
make -f ./gtest-1.4.0/make/Makefile
make[1]: Entering directory `/path/to/project'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/path/to/project'
Run Code Online (Sandbox Code Playgroud)
但是,当我发出这些命令时:
cd /path/to/project
make clean
Run Code Online (Sandbox Code Playgroud)
我知道了:
make -f gtest-1.4.0/make/Makefile clean
make[1]: Entering directory `/path/to/project'
rm -f gtest.a gtest_main.a *.o
make[1]: Leaving directory `/path/to/project'
Run Code Online (Sandbox Code Playgroud)
我不明白:在这两种情况下,/path/to/project/makefile都告诉我它正在进入当前的工作目录.在第一种情况下,它认为它没有工作要做(当它这样做)而在第二种情况下,它能够找到适当的指令(当输出告诉我它正在查找错误的目录时)它尝试运行rm命令/path/to/project,而不是/path/to/makefile/gtest-1.4.0/make/.
我是否遗漏了从彼此调用makefile的基本内容?我是否犯了一个令人震惊的概念错误,或者遇到了常见的陷阱?如何有效地更改目录并从第一个内部调用第二个makefile?我的理解是,简单地打电话make -f <name>就足够了.
这是bash中的make/gmake 3.81.
Tad*_*der 116
取而代之的是-f的make,你可能要使用的-C <path>选项.这首先改变路径' <path>',然后make在那里调用.
例:
clean:
rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
rm -f ../svn-commit.tmp~
rm -f $(BIN_DIR)/$(PROJECT)
$(MAKE) -C gtest-1.4.0/make clean
Run Code Online (Sandbox Code Playgroud)
小智 97
我不太清楚你在问什么,但使用-f命令行选项只是指定一个文件 - 它不会告诉make更改目录.如果要在另一个目录中进行工作,则需要cd到以下目录:
clean:
cd gtest-1.4.0 && $(MAKE) clean
Run Code Online (Sandbox Code Playgroud)
请注意,每一行都在Makefile一个单独的shell 中运行,因此无需更改目录.
Aad*_*hri 35
http://www.gnu.org/software/make/manual/make.html#Recursion
subsystem:
cd subdir && $(MAKE)
Run Code Online (Sandbox Code Playgroud)
或者,相当于:
subsystem:
$(MAKE) -C subdir
Run Code Online (Sandbox Code Playgroud)