![Makefile make install이 여러 줄 명령을 실행하지 않습니다.](https://rvso.com/image/36035/Makefile%20make%20install%EC%9D%B4%20%EC%97%AC%EB%9F%AC%20%EC%A4%84%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
소스 코드를 빌드한 후 install
수행할 수 있는 섹션이 포함된 Makefile이 있습니다 . make install
이 install
섹션에는 두 줄의 셸 명령이 포함되어 있습니다.
install: /usr/local/lib
cp $(LIB_OBJ) $<
export LD_LIBRARY_PATH=$<
따라서 첫 번째 줄은 libxxx.so를 복사하고 두 번째 줄은 최종 실행 파일이 libxxx.so 파일을 찾을 수 있도록 환경 /usr/local/lib
변수를 설정합니다 .LD_LIBRARY_PATH
/usr/local/lib
make install
그러나 명령줄에서 실행하고 다음을 입력하면 다음과 같습니다.
echo $LD_LIBRARY_PATH
의도한 것 보다 빈 내용이 표시됩니다 /usr/local/lib
. 그렇다면 Makefile의 두 번째 명령줄은 왜 실행되지 않습니까?
답변1
make
거의 확실하게 두 명령 줄을 모두 실행하고 있습니다. 그러나 줄 export LD_LIBRARY_PATH=$<
(또는 make
이를 확장하는 모든 항목)은 프로세스의 하위 프로세스인 셸에 의해 실행됩니다 make
. 를 입력하면 echo $LD_LIBRARY_PATH
LD_LIBRARY_PATH 환경 변수에 포함된 모든 내용을 얻게 됩니다. 쉘이 make
실행 의 하위 프로세스인 "내보내기"를 실행하지 않았습니다 . .bashrc
귀하 의 파일 에서 내보내기를 수행 .zshrc
하거나 수동으로 입력해야 합니다.
답변2
노력하다:
export LD_LIBRARY_PATH := /usr/local/lib:$(LD_LIBRARY_PATH)
install:
#Do Install actions
보다Make 매뉴얼의 섹션 5.3서브쉘에 대한 브루스의 올바른 가정에 대한 설명은 다음과 같습니다.StackOverflow의 답변, 이는 모든 명령이 하나의 라이너로 실행되어야 함을 나타냅니다.
업데이트
하나의 라이너가 작동하지 않았으므로 다음을 예로 사용하십시오(최종 메이크파일이 작동할 수 있도록 아래 파일을 포함하고 있습니다).
파일 목록:
hellomacke.c
#include
int main() {
// call a function in another file
myPrintHelloMake();
return(0);
}
hellofunc.c
#include
#include
void myPrintHelloMake(void) {
printf("Hello makefiles!\n");
return;
}
hellomake.h
/*
example include file
*/
void myPrintHelloMake(void);
파일 목록 종료
메이크파일
IDIR =../include
CC=gcc
CFLAGS=-I$(IDIR)
ODIR=obj
LDIR =../lib
LIBS=-lm
_DEPS = hellomake.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJ = hellomake.o hellofunc.o
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))
$(ODIR)/%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)
hellomake: $(OBJ)
gcc -o $@ $^ $(CFLAGS) $(LIBS)
.PHONY: clean
clean:
rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~
위 메이크파일은 매크로와 문자열 확장을 사용하여 명령 없이도 포함 및 라이브러리 디렉터리를 적절하게 설정합니다 export
. 귀하의 경우에는 전달한 /usr/local/libs
다음 LDIR
컴파일하면 시작됩니다.
참고자료
Colby College, Maine, 컴퓨터 공학과 - Makefile Tutorial
M4 매크로 프로세서 - 대체 붙여넣기