한 메이크 파일을 다른 메이크 파일에서 호출하는 예상치 못한 결과가 나타납니다. 하나는 호출 /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
그리고 /path/to/project/gtest-1.4.0/make/Makefile
나는
all: $(TESTS)
clean:
rm -f $(TESTS) gtest.a gtest_main.a *.o
다음을 발행합니다.
cd /path/to/project
make
출력 :
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'
그러나 다음 명령을 실행할 때 :
cd /path/to/project
make clean
내가 참조:
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'
이해가 안 돼요 : 두 경우 모두 /path/to/project/makefile
현재 작업 디렉토리에 들어간다고합니다. 첫 번째 경우에는 수행 할 작업이 없다고 생각하고 두 번째 경우에는 적절한 지시문을 찾을 수 있습니다 (출력이 잘못된 디렉토리를보고 있다고 말할 때). 대신 에서 rm
명령 을 실행합니다 ./path/to/project
/path/to/makefile/gtest-1.4.0/make/
서로 메이크 파일을 호출하는 데 근본적인 것이 있습니까? 심각한 개념상의 실수를 저질렀거나 일반적인 함정에 부딪 혔습니까? 어떻게 효과적으로 디렉토리를 변경하고 첫 번째에서 두 번째 makefile을 호출합니까? 내 이해는 단순히 부르는 것만 make -f <name>
으로도 충분하다는 것입니다.
이것은 bash의 make / gmake 3.81입니다.
make -f gtest-1.4.0/make/Makefile clean
당신 대신에$(MAKE) -C gtest-1.4.0/make clean
. 왜 가짜 표적을 정의하지 않았습니까?