한 메이크 파일을 다른 메이크 파일에서 호출하는 예상치 못한 결과가 나타납니다. 하나는 호출 /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입니다.
답변
나는 당신이 무엇을 요구하는지 너무 명확하지 않지만 -f
명령 줄 옵션을 사용하여 파일을 지정하기 만하면됩니다. 이것은 make가 디렉토리를 변경하도록 지시하지 않습니다. 다른 디렉토리에서 작업 cd
하려면 다음 디렉토리 로 이동 해야합니다 .
clean:
cd gtest-1.4.0 && $(MAKE) clean
의 각 줄은 Makefile
별도의 셸 에서 실행되므로 디렉토리를 다시 변경할 필요가 없습니다.
답변
대신의 -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
답변
http://www.gnu.org/software/make/manual/make.html#Recursion
subsystem:
cd subdir && $(MAKE)
또는 동등하게 다음과 같습니다.
subsystem:
$(MAKE) -C subdir
답변
$(TESTS)
비어있는 것 같아서 1.4.0 메이크 파일이 효과적으로
all:
clean:
rm -f gtest.a gtest_main.a *.o
사실, 모두 할 일이 없습니다. 그리고 clean은 그것이 말하는 것과 정확히 일치합니다.rm -f gtest.a ...