Programming

다른 Makefile에서 Makefile을 호출하는 방법?

procodes 2020. 7. 28. 21:55
반응형

다른 Makefile에서 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

그리고 /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을 호출하는 데 근본적인 것이 빠져 있습니까? 심각한 개념의 실수를 저 지르거나 일반적인 함정을 겪었습니까? 디렉토리를 효과적으로 변경하고 첫 번째 파일에서 두 번째 makefile을 어떻게 호출합니까? 이해는 단순히 부르는 make -f <name>것으로 충분 하다는 것이 었 습니다.

이것은 bash의 make / gmake 3.81입니다.


나는 당신이 요구하는 것을 너무 명확하지 않지만 -f명령 줄 옵션을 사용하면 파일을 지정하기 만합니다-디렉토리를 변경하라는 make를 지시하지 않습니다. 다른 디렉토리에서 작업을 수행하려면 디렉토리로 이동해야합니다 cd.

clean:
    cd gtest-1.4.0 && $(MAKE) clean

각 줄은 Makefile별도의 셸 에서 실행되므로 디렉토리를 다시 변경할 필요가 없습니다.


대신의 -fmake당신이 사용할 수있는 -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 makefile이 효과적으로

all: 

clean:
  rm -f  gtest.a gtest_main.a *.o

실제로 모든 것은 할 일이 없습니다. 깨끗하게 말하는대로rm -f gtest.a ...

참고 URL : https://stackoverflow.com/questions/2206128/how-to-call-makefile-from-another-makefile

반응형