【问题标题】:CGAL overwrites CMAKE_BUILD_TYPE=DebugCGAL 覆盖 CMAKE_BUILD_TYPE=Debug
【发布时间】:2017-10-04 16:26:40
【问题描述】:

在我的 CMake C++ 项目中,我使用的是 CGAL。 它通过apt(包libcgal-dev版本4.7-4)安装在我的Ubuntu系统(版本16.04 LTS)上。

在我的 CMakeLists.txt 中,CGAL 库包含如下:

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

到目前为止,这工作正常。

当我想在调试模式下编译时出现问题: 我从我的构建目录调用 cmake:

cmake -DCMAKE_BUILD_TYPE=Debug ..

但是,在输出中,cmake 说

-- 构建类型:发布

这似乎是由 /usr/lib/x86_64-linux-gnu/cmake/CGAL/CGALConfig.cmake 中的这一行 (35) 设置的

set(CGAL_BUILD_TYPE_INIT "Release" )

但我不知道如何覆盖它。 我唯一发现的是两次运行上述命令时启用了调试,这似乎不是正确的方法。

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

【问题讨论】:

  • -DCGAL_DONT_OVERRIDE_CMAKE_FLAGS=TRUE 有帮助吗?
  • 谢谢。看起来还不错。你知道我是否也会忽略所有 CGAL 的编译标志是否会造成问题?
  • 取决于哪些标志,但像 -frounding-math 这样的东西确实很重要,忽略它们可能是个问题。

标签: c++ cmake cgal


【解决方案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})

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2012-01-28
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多