2017-09-27 6 views
1

여기에 몇 가지 질문을 읽었지만 여전히 Makefile은 내가 원하는 것을하지 않습니다. 다른 질문과는 달리 두 단계 컴파일 여기 있습니다. 단계는 다음과 같습니다 .cpp.h 파일을 생성변경된 파일 만 다시 컴파일하십시오 (2 단계)

  • 사용 (ppx라고 함) 전처리 도구,
  • 다음 .o 파일,
  • 마지막으로 동적 라이브러리를 생성 생성을 컴파일합니다.

이 모든 것들이 Xcode 환경 (사용자 정의 빌드 대상)에 있으므로이 모든 것들을 $(TARGET_TEMP_DIR) 및 유사한 변수로 볼 수 있습니다.

make 명령은 ppx 파일 있습니다 을 호출,하지만 난 올바른 디렉토리에 생성 된 모든 파일 (.cpp, .h, .o.dylib)을 ($(LIB) 참조) 배치해야합니다.

주의 : ppx 도구 은 타임 스탬프을 보존하지 않습니다.

이 내 실패 시도 :

# target and compiler 
LIB=$(TARGET_TEMP_DIR)/$(TARGET_NAME).dylib 
PPX=$(HOME)/bin/ppx 

# c++ compiler 
CXXFLAGS=-std=c++14 

# files 
PPX_FILES := $(patsubst %.ppx, %.cpp, $(wildcard *.ppx)) 
CPP_FILES := $(patsubst %.ppx, %.o, $(wildcard *.ppx)) 
OBJ_FILES := $(addprefix $(TARGET_TEMP_DIR)/,$(CPP_FILES:%.cpp=%.o)) 

# link library 
all: $(LIB) 

$(LIB): $(PPX_FILES) $(CPP_FILES) $(OBJ_FILES) 
    $(CXX) -dynamiclib -o $(LIB) $(OBJ_FILES) 

# preprocess, generating source and header 
%.cpp: %.ppx 
    $(PPX) -o $(TARGET_TEMP_DIR) $< 

# compile cpp source files 
%.o: %.cpp 
    $(CXX) $(CXXFLAGS) -Ofast -o $(TARGET_TEMP_DIR)/[email protected] -c $(TARGET_TEMP_DIR)/$< 

Makefile 항상 모든 파일을 재 컴파일합니다. 여기서 발견 한 모든 질문을 읽은 후에 성공한 유일한 방법은 Makefile을 다시 컴파일하지 않는 것입니다. 따라서 ppx 파일을 변경하면 아무 것도 수행하지 않았습니다.

오류를 발견하도록 도와 줄 수 있습니까?

+0

변수'PPX_FILES'와'CPP_FILES'는 오해의 소지가 있습니다.'PPX_FILES'는 C++ 소스 파일을 나열하고'CPP_FILES'는 객체 파일을 나열합니다. 또한 각 변수에 대해 디스크에서 파일 이름을 가져올 필요가 없으며 첫 번째 변수의 접미사를 바꿉니다. –

+0

ppx 도구가 변경되지 않은 파일을 다시 생성합니까? 타임 스탬프가 변경됩니까? –

+0

@RetiredNinja 네, 맞습니다. 나는 이것을 피하기 위해'make '를 사용하려고합니다. – senseiwa

답변