메이크 파일을 작성하여 독립 소스 코드를 가지고 있지만 컴파일 규칙과 공유 종속성 (공통 헤더)이있는 동일한 디렉토리에 C++ 프로그램 세트를 작성하려고합니다.메이크 파일의 종속성 목록에 대상 이름을 전달합니다.
/path/to/project/
peformance.h
vector.h
pqvm.cpp
quantum/
quantum-tbb.h
quantum-sequential.h
...
tests/
grainsize.cpp
kronecker.cpp
sigma-z.cpp
...
Makefile
은 내가 tests
폴더에있는 소스, 해당 실행 파일에 각 소스를 컴파일합니다. 아래는 내가 사용하려고하는 메이크 파일입니다. 줄에 문제가있는 것 같습니다. $(TARGETS): %.o
.
나는 현재 대상의 이름 (예를 들어, grainsize
)를 참조 할하고 (예를 들어 grainsize.o
), 둘 %.o
도 [email protected]
이 제대로 작동하지 해당 객체 파일에 의존합니다. 나는 라인을 $(TARGETS): $(OBJECTS)
으로 바꿀 수 있었지만, 모든 타겟은 모든 오브젝트에 의존 할 것이고, 각각의 변경에서 많은 불필요한 재 컴파일을 유발할 것이다.
그래서 기본적으로 : 종속성 목록에서 대상 이름을 올바르게 참조하려면 어떻게해야합니까? 이 관련된 질문 : Passing target name to a dependency in makefile을 알고 있지만이 문제에 어떻게 적용되는지 알 수 없습니다.
$ make
make: *** No rule to make target `%.o', needed by `grainsize'. Stop.
+1 또한,'$ ^'는 다른 모든 의존성을 포함합니다. 이것은 보통 좋은 일이지만, 어떤 이유로 든 그것을 원하지 않는다면,'$ <'는 당신에게 첫 번째 의존성을줍니다. (추가 의존성은이 패턴 규칙 밖에서 선언 될 수 있으므로'foo : bar.o'를'foo'에 대한 추가 의존성으로 말할 수 있고'foo'와'$ (TARGETS)'.) – tripleee
감사합니다. – kmoerman