2017-07-18 21 views
0

私はgithubのプロジェクトにCMakeLists.txtにMakefileを変換しています 「https://github.com/Golevka/deformation-transfer」 例えば、フォルダ/ corres_resolve にそのMakefileのには、次のようなものです。cmakeの外部の静的ライブラリ循環依存

{

INCLUDE_PATH := ./ ../external/include/ ../common/ 
SOURCE_PATH  := ./ ../common/ 
DEPENDENCY_PATH := dep 
OBJECT_PATH  := obj 

EXTERNAL_LIBS := $(wildcard ../external/lib/*.a) 
LDLIBS := -lm -lpthread 

CFLAGS += -O3 

include ../makefile.mk 

}

そのmakefile.mk残念ながら {

vpath %.h $(INCLUDE_PATH) 
vpath %.c $(SOURCE_PATH) 
vpath %.d $(DEPENDENCY_PATH) 
vpath %.o $(OBJECT_PATH) 


## default .o and .dep path and program name 
OBJECT_PATH  ?= obj 
DEPENDENCY_PATH ?= dep 
PROGRAM_NAME ?= run 

# source trunk 
source-files = $(wildcard $(addsuffix /*.c, $(SOURCE_PATH))) 
source-list  = $(notdir $(source-files)) 

# binary trunk 
objname-list = $(subst .c,.o, $(source-list)) 
object-list  = $(addprefix $(OBJECT_PATH)/, $(objname-list)) 

# dependency trunk 
depname-list = $(subst .c,.d, $(source-list)) 
dependency-list = $(addprefix $(DEPENDENCY_PATH)/, $(depname-list)) 

# -I option to help the compiler finding the headers 
CFLAGS += $(addprefix -I, $(INCLUDE_PATH)) 

# Build external library cmdline parameter, those -Xlinker directives instructs 
# the linker find the correct linking sequence regardless the order of items 
# specified in EXTERNAL_LIBS.`enter code here` 
LOADLIBES += \ 
-Xlinker --start-group \ 
    $(addprefix -Xlinker , $(EXTERNAL_LIBS)) \ 
-Xlinker --end-group 

# PROGRAM_NAME is provided in custom makefile 
$(PROGRAM_NAME): $(object-list) 
$(LINK.c) $^ $(LOADLIBES) $(LDLIBS) -o [email protected] 
$(OBJECT_PATH)/%.o: %.c 
@mkdir -p $(OBJECT_PATH) 
$(COMPILE.c) $(OUTPUT_OPTION) $< 
# Resolve [object,source] -- [header] dependency 
-include $(dependency-list) 
$(DEPENDENCY_PATH)/%.d: %.c 
@mkdir -p $(DEPENDENCY_PATH) 
@$(CC) -M $(CFLAGS) $< > [email protected]$$$$;   \ 
sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \ 
rm -f [email protected]$$$$ 

} 

で、$(EXTERNAL_LIBS)は、それぞれに円形の依存関係を持つ10個の静的* .Aファイルを有していますその他。 これをCMakeLists.txtでどのように処理するかは誰でも知っていますか?

答えて

1

これは、--start-group--end-groupリンカーオプションで解決する方法を示しています。 gccで

、あなたは-Wlを使用することになり、 - 起動グループと-Wl、 - 末端基を周りに(のみ)ごtarget_link_libraries()

では問題のライブラリ