a Makefile
에는 모든 .cc
및 .cpp
파일의 컴파일을 처리하기 위해 다음과 같은 두 개의 세미 제네릭 대상이 있습니다 .
$(OBJ_DIR)/%.o: %.cc
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
$(OBJ_DIR)/%.o: %.cpp
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
그것들이 매우 비슷하기 때문에 (파일 확장자 만 다름) 어떻게 든 병합하여 두 파일 유형에 대해 하나의 일반 대상을 만들 수 있습니까?
일반적으로 조합 할 수 없습니다. 두 가지 옵션이 있습니다. 첫 번째는 eval
Amon Zilca가 연결 한 답변에서와 같은 진술 을 사용하는 것입니다.
다른 하나는 레시피를 변수로 유지하고 재사용하는 것입니다.
define COMPILE
mkdir -p $(dir $@)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(INCDIRS) -c $< -MD -o $@
endef
$(OBJ_DIR)/%.o: %.cc
$(COMPILE)
$(OBJ_DIR)/%.o: %.cpp
$(COMPILE)
개인적으로 저는이 방법이 더 좋습니다. eval
당신이 확장 기능을 많이 가지고, 또는 당신은 쉽게 변수를 조정하여 더 많은 단지 추가 할 수 있도록하려는 경우가 아니면 메소드는 나에게 잔인한 것 같은 느낌이 든다.
아, $(@D)
대신 사용할 수 있습니다 $(dir $@)
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다