首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CMake选项()与add_definitions()相结合

将CMake选项()与add_definitions()相结合
EN

Stack Overflow用户
提问于 2015-09-22 20:49:12
回答 1查看 1.7K关注 0票数 1

目前,我的CMakeLists.txt中有以下内容(只列出了这个问题的基本部分):

代码语言:javascript
复制
option(NORMALS_WITH_OPENMP "Enable OpenMP for estimating the normals of a point cloud" OFF)
if(NORMALS_WITH_OPENMP)
  message("OpenMP enabled")
  add_definitions(-DENABLE_OPENMP)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
endif()

在我的一个源文件中我有:

代码语言:javascript
复制
#ifdef ENABLE_OPENMP
  #include <pcl/features/normal_3d_omp.h>
#else
  #include <pcl/features/normal_3d.h>
#endif

该源文件中的代码中的其他位置也以相同的方式启用/禁用,这取决于是否定义了ENABLE_OPENMP

我对此的要求是能够简要描述OpenMP支持(使用option()),然后如果选项设置为ON,添加ENABLE_OPENMP定义,以便以不同的方式编译代码(使用add_definitions())。

问题:

  • 这是正确的做法,还是有一个更优雅的方式来处理这种情况?
  • 我是否可以忽略其中的一个,或者我真的必须坚持两者的结合,以满足我上面列出的要求?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-23 06:32:36

如果您只在此OpenMP特性中使用NORMALS,则没关系。否则,您实际上混合了两种情况-- OpenMP使用和将其用于NORMALS。如果您有更多用OpenMP实现的可选特性,您应该这样做:

代码语言:javascript
复制
find_package(OpenMP)

# enable OpenMP if compiler supports it
if(OpenMP_FOUND)
  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

# let user choose each option if OpenMP is there
if(OpenMP_FOUND)
  option(NORMALS_WITH_OPENMP "Blabla" OFF)
  option(ANOTHER_THING_WITH_OPENMP "Blabla" ON)
endif()

现在您可以有条件地使用add_definitions(-DFEATURE),或者像@Tsyvarev建议的那样,创建一个带有行的config.h.cmake文件

代码语言:javascript
复制
#cmakedefine NORMALS_WITH_OPENMP
#cmakedefine ANOTHER_THING_WITH_OPENMP

configure_file(),同时处理所有的定义。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32726639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档