2017-10-04 55 views
1

在我的CMake C++项目中,我使用CGAL。 它通过apt(Package libcgal-dev版本4.7-4)安装在我的Ubuntu系统(版本16.04 LTS)上。CGAL覆盖CMAKE_BUILD_TYPE =调试

find_package(CGAL REQUIRED) 
if (CGAL_FOUND) 
    include(${CGAL_USE_FILE}) 
    include(CGAL_CreateSingleSourceCGALProgram) 
endif() 

也能正常工作至今:

在我的CMakeLists.txt,如下CGAL库包括在内。

的问题出现了,当我想在调试模式下进行编译: 我打电话cmake的从我的build目录:

cmake -DCMAKE_BUILD_TYPE=Debug .. 

然而,在输出中,cmake的说

- 建立类型:释放

这似乎是由这条线(35)在/usr/lib中/ x86_64的-Linux的GNU/cmake的/ CGAL/CGALConfi被设置g.cmake

set(CGAL_BUILD_TYPE_INIT "Release") 

但我不知道该如何重写这个。 我唯一发现的是在运行上述命令两次时启用了调试,这似乎不是正确的方式。

如何在使用CGAL时使用调试选项进行编译?

+1

是否'-DCGAL_DONT_OVERRIDE_CMAKE_FLAGS = TRUE'有帮助吗? –

+0

谢谢。看起来不错。你知道是否会造成一个问题,我也忽略了CGAL的所有编译标志? – Gregor

+0

取决于哪些标志,但是像数学这样的东西确实很重要,忽略它们可能会成为问题。 –

回答

1

它应该运行两次的原因是,第一次,cmake会运行查找包脚本,但第二次cmake会缓存设置变量,并不会再次运行脚本。 如果你说的是正确的,该脚本覆盖了构建类型(症状看起来像是这样),也许有一个原因,他们这样做(我不知道可能是什么原因,但你应该调查它)。 一般的解决方法,以你的情况可能会缓存构建自己输入,找到包这样的后重置它:(再次,它可能是危险的,首先,要确保它是安全的)

set (CACHED_BUILD_TYPE ${CMAKE_BUILD_TYPE}) 
find_package(CGAL REQUIRED) 
if (CGAL_FOUND) 
    include(${CGAL_USE_FILE}) 
    include(CGAL_CreateSingleSourceCGALProgram) 
endif() 
set (CMAKE_BUILD_TYPE ${CACHED_BUILD_TYPE})