2017-07-18 3 views
0

I Makefile CMakeLists.txt im Github-Projekt „https://github.com/Golevka/deformation-transfer“ Zum Beispiel bin Umwandlung in Ordnern/corres_resolve seine Makefile ist wie folgt.Cmake externe statische Bibliothek zirkuläre Abhängigkeit

{

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 

}

seine makefile.mk ist {

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]$$$$ 

} 

Leider hat $ 10 (EXTERNAL_LIBS) statisch * .a-Dateien, die zu jedem Kreis Abhängigkeiten andere. Wer kann in CMakeLists.txt damit umgehen?

Antwort

1

Es zeigt in der makefile.mk, wie das mit den --start-group und --end-group Linker-Optionen zu lösen.

Mit gcc, würden Sie verwenden -Wl, - Start-Gruppe und -Wl, - End-Gruppe um (nur) die problematischen Bibliotheken in Ihrem target_link_libraries()

Verwandte Themen