CGAL的makefile(libcgal8)

3
我不知道为什么,但每次CGAL的新版本发布时,编译程序都会完全改变。因此,即使是半年前的旧代码也无法重新编译,因为它不再像以前那样工作了。
我对每次需要重新制作使用CGAL的项目的所有makefile感到非常疲倦。这一次,对于libcgal8,我找不到任何简单的替代品。以下是我通常使用的makefile:
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()’中: main.cpp:(.text._ZN4CGAL8Gmpq_repC2Ev[_ZN4CGAL8Gmpq_repC5Ev] + 0x14):对‘__gmpq_init’未定义引用”
我还收到与其他功能类似的错误,例如“__gmpg_add”,“__gmpq_sub”和“__gmpq_mul”。
解决方案: 您需要在编译指令中添加“-lgmp”。令人遗憾的是,CGAL提供的makefile默认不会执行此操作!

自2009年1月(版本3.4)起,CGAL使用cmake作为构建系统。从那时起,所有的包含/链接编译器标志都是通过cmake机制(CGALConfig.cmake)提供的。 - sloriot
如上所述,现在CGAL使用cmake作为构建系统。在使用cmake编译CGAL示例时,我遇到了类似的问题。解决方法是添加并链接GMP库。以下是cmake的操作步骤:https://dev59.com/q1rUa4cB1Zd3GeqPfwXd#6980807 - sinner
2个回答

2
在评论和编辑中已经回答。请参见没有答案但在评论中解决问题的问题(或在聊天中扩展)
OP写道:
你需要在编译指令中添加“-lgmp”。遗憾的是,由CGAL提供的makefile默认情况下没有这样做!
@sloriot补充说:
自2009年1月(发布3.4版)以来,CGAL使用cmake作为构建系统。从那时起,所有包含/链接编译器标志都通过cmake机制(CGALConfig.cmake)提供。
如上所述,现在CGAL使用cmake作为构建系统。在使用cmake编译CGAL示例时,我遇到了类似的问题。解决方案是添加并链接GMP库。以下是在cmake中完成此操作的方法:Cmake基本库链接问题

1
这是我为Linux和Mac OS X准备的Makefile(不使用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 = $(wildcard *.cpp) OBJ = $(addsuffix .o, $(basename $(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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接