makefile pour CGAL (libcgal8)

Je ne sais pas pourquoi, mais à chaque nouvelle version de CGAL, la procédure de compilation change complètement. Donc, il n’est même pas possible de recomstackr un ancien morceau de code (6 mois) car cela ne fonctionne plus comme ça.

Je suis franchement très fatigué de refaire tout le makefile de mes projets qui utilisent CGAL à chaque fois. Cette fois, pour libcgal8, je ne trouve pas de substitut simple. Voici le makefile que j’utilisais normalement:

ifndef CGAL_MAKEFILE CGAL_MAKEFILE = /usr/local/cgal/share/cgal/cgal.mk endif include $(CGAL_MAKEFILE) LIBPATH = \ $(CGAL_LIBPATH) LDFLAGS = \ $(LONG_NAME_PROBLEM_LDFLAGS) \ $(CGAL_LDFLAGS) COMP=-frounding-math -fopenmp -std=c++0x -l json -L$(LIBPATH) $(LDFLAGS) EXEC=../crender all: main.o g++ -fPIC main.o $(EXEC) $(COMP) main.o: main.cpp ../common/common.hpp g++ -c main.cpp $(COMP) -o main.o 

Alors, que dois-je changer pour le faire fonctionner à nouveau? Si possible, une solution qui survivra aux changements futurs de CGAL.

Si cela peut aider, voici le type d’erreur que je reçois:

Dans la fonction CGAL::Gmpq_rep::Gmpq_rep()':
main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to
CGAL::Gmpq_rep::Gmpq_rep()':
main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to
CGAL::Gmpq_rep::Gmpq_rep()':
main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to
__gmpq_init ‘

Et j’obtiens ce genre d’erreurs pour d’autres fonctions comme “__gmpg_add”, “__gmpq_sub” et “__gmpq_mul”.

SOLUTION: Vous devez append “-lgmp” dans l’instruction de compilation. C’est dommage que ce ne soit pas fait par défaut par le makefile fourni par CGAL!

(Répondu dans les commentaires et dans une édition. Voir la question sans réponses, mais problème résolu dans les commentaires (ou étendu dans le chat) )

L’OP a écrit:

Vous devez append “-lgmp” dans l’instruction de compilation. C’est dommage que ce ne soit pas fait par défaut par le makefile fourni par CGAL!

@sloriot ajouté:

Depuis janvier 2009 (version 3.4), CGAL utilise cmake comme système de construction. Depuis lors, tous les indicateurs du compilateur include / link sont fournis via le mécanisme cmake (CGALConfig.cmake).

Comme mentionné ci-dessus, maintenant CGAL utilise cmake comme système de construction. Lors de la compilation de l’exemple CGAL avec cmake, j’ai rencontré un problème similaire. La solution consiste à append et relier la bibliothèque GMP. Voici comment cela se fait pour cmake: Problème de liaison de base à la bibliothèque Cmake

Ceci est mon makefile pour linux et mac os x (sans utiliser cmake):

 CPP := g++ OPCJE := -W -Wall -pedantic -O0 -Wno-c++11-extensions BIBLIOTEKI := -lboost_math_c99 -lboost_thread -lm -lCGAL -lmpfr -lgmp PISZ := echo -e UNAME_S := $(shell uname -s) 

sur Mac OS X, certaines bibliothèques portent des noms différents (installation en mode armsage)

 ifeq ($(UNAME_S),Darwin) BIBLIOTEKI = -lboost_math_c99 -lboost_thread-mt -lm -lcgal -lmpfr -lgmp PISZ = echo endif 

toutes les sources SRC = $ (joker * .cpp) OBJ = $ (addeduffix .o, $ (nom de base $ (SRC)))

 BIN_DIR = ./bin W_ZRODLA = $(wildcard *.cpp) PROGRAMY = ${W_ZRODLA:%.cpp=$(BIN_DIR)/%} $(BIN_DIR)/%: %.cpp @mkdir -p ./bin $(CPP) $(OPCJE) $< -o $@ $(BIBLIOTEKI) wszystkie: $(PROGRAMY) @echo clean: rm -f ./bin/* mem: 01 valgrind -v --tool=memcheck --leak-check=full ./01