make-файл для CGAL (libcgal8) - PullRequest
       12

make-файл для CGAL (libcgal8)

3 голосов
/ 08 января 2012

Не знаю почему, но в каждой новой версии CGAL процедура компиляции полностью меняется.Таким образом, даже невозможно перекомпилировать старый кусок кода (6 месяцев), потому что он больше не работает так.

Честно говоря, я очень устал от переделки всего make-файла моих проектов, использующих CGAL.каждый раз.На этот раз для libcgal8 я не нашел простой замены.Вот make-файл, который я обычно использовал:

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

Итак, что мне нужно изменить, чтобы он снова заработал?Если возможно, решение, которое доживет до будущих изменений CGAL. ​​

Если оно может помочь, вот такая ошибка, которую я получаю:

В функции CGAL::Gmpq_rep::Gmpq_rep()':<br> main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev]+0x14): undefined reference to __ gmpq_init'

И я получаю такие ошибки для других функций, таких как "__gmpg_add", "__gmpq_sub" и "__gmpq_mul."

РЕШЕНИЕ: Вам необходимо добавить "-lgmp" винструкция по компиляции.Прискорбно, что по умолчанию это не делается make-файлом, предоставляемым CGAL!

Ответы [ 2 ]

2 голосов
/ 24 января 2015

(Ответы в комментариях и в редактировании. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )

ОП написал:

Вам необходимо добавить "-lgmp" в инструкции по компиляции. Грустно, что по умолчанию это не делается make-файлом, предоставляемым CGAL!

@ sloriot Добавлено:

С января 2009 года (выпуск 3.4) CGAL использует cmake в качестве системы сборки. С тех пор все флаги компилятора include / link предоставляются через механизм cmake (CGALConfig.cmake).

Как уже упоминалось выше, теперь CGAL использует cmake в качестве системы сборки. При компиляции примера CGAL с помощью cmake я столкнулся с похожей проблемой. Решение - добавить и связать библиотеку GMP. Вот как это делается для cmake: Основная проблема компоновки библиотеки Cmake

1 голос
/ 14 ноября 2017

Это мой make-файл для Linux и Mac OS X (без использования 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)

на Mac OS X некоторые библиотеки имеют другое имя (brew install)

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

все источники SRC = $ (подстановочный знак * .cpp) OBJ = $ (добавочный суффикс .o, $ (базовое имя $ (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
...