2009-06-19 2 views
2

필자는 내가 원하는 방식대로 작동하도록 makefile을 얻는 데 어려움을 겪고있다. 첫째로, 나는 이것이 POSIX make라고 말하고 싶다. http://www.opengroup.org/onlinepubs/009695399/utilities/make.html BSD와 GNU (Linux) 모두에서 작동하도록 빌드 시스템이 필요하다.오브젝트와 소스를 메이크 파일로 분리

제가 원했던 것은 제로 유지 보수 메이크 파일입니다. src /에있는 모든 .c 및 .asm 파일을 컴파일하고 objs /에 오브젝트 파일을 놓은 다음 objs /에있는 모든 파일을 이진 파일에 연결합니다.

많은 작업을 수행 할 수 있지만 소스 및 obj 파일을 구분할 수는 없습니다.

약간의 내장 쉘 스크립팅 (/ bin/sh가 정의 된 POSIX 사용)이 필요하면 괜찮지 만, 의존성을 제대로 작동시키지 못한다. 소스 파일이 더 새로운 경우에만 오브젝트 파일을 빌드하기를 원합니다.

내 가장 가까운 이것이다 : 이것은 아직 지정해야 문제가

 
${C_OBJS}: ${HDRS} ${*:objs/%=src/%}.c 
    ${CC} ${CFLAGS} -c ${*:objs/%=src/%}.c -o $*.o 

C_OBJS = OBJS/foo.o 및도 그냥 거의하지 POSIX이므로, BSD 메이크업과 컴파일하지만, GNU make가 아닙니다.

답변

1

make의 POSIX 버전은 파일 이름에 슬래시가있는 파일 이름을 명시 적으로 지원하지 않으며 객체 파일과 다른 디렉토리에있는 소스 파일을 구분하기위한 조항도 제공하지 않습니다. 그리고 @caskey가 지적한 것처럼 '%'문자를 사용하는 표기법은 지원하지 않지만 이러한 규칙이 있으며 메타 문자로 사용하도록 예약되어 있음을 알립니다.

따라서 POSIX make으로 원하는 작업을 수행 할 수 없습니다.

실제로는 make의 특정 구현에서 원하는 것을 할 수 있지만 그 결과로 makefile은 휴대 성이 제한적입니다. cmake 또는 자동 도구 (autoconf, libtool, automake 등) -

은 어떤 종류의 메이크 발전 시스템을 사용하는 것이 좋습니다. 또는 기본 make의 개념의 많은 재 작업 중 하나를

  • SCons는
  • 개미
  • 케이크
  • 요리사
  • 브래지어
  • ... 및 다스 내가 잊어 버린 또는 들으 않았거나 ...
0

POSIX make는 다음과 같은 구문을 지원하지 않습니다.

objs/%.o : src/%.c 
    ${CC} ${CFLAGS} -c $< -o [email protected] 

끝 부분에 물음표를 잊어 버렸습니다. 내 의견을 분명히합니다.

+0

들었어? BSD와 GNU make를 모두 지원할 수있을 것 같아요. GNU make에서 작동하는 것 같습니다. BSD에서 "close"라고 생각합니다. – Earlz

+0

기다림, 실제로는 전혀 작동하지 않습니다. BSD make – Earlz