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
파일을 변경하면 아무 것도 수행하지 않았습니다.
오류를 발견하도록 도와 줄 수 있습니까?
변수'PPX_FILES'와'CPP_FILES'는 오해의 소지가 있습니다.'PPX_FILES'는 C++ 소스 파일을 나열하고'CPP_FILES'는 객체 파일을 나열합니다. 또한 각 변수에 대해 디스크에서 파일 이름을 가져올 필요가 없으며 첫 번째 변수의 접미사를 바꿉니다. –
ppx 도구가 변경되지 않은 파일을 다시 생성합니까? 타임 스탬프가 변경됩니까? –
@RetiredNinja 네, 맞습니다. 나는 이것을 피하기 위해'make '를 사용하려고합니다. – senseiwa