目前,我的CMakeLists.txt中有以下内容(只列出了这个问题的基本部分):
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()在我的一个源文件中我有:
#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())。
问题:
谢谢!
发布于 2015-09-23 06:32:36
如果您只在此OpenMP特性中使用NORMALS,则没关系。否则,您实际上混合了两种情况-- OpenMP使用和将其用于NORMALS。如果您有更多用OpenMP实现的可选特性,您应该这样做:
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文件
#cmakedefine NORMALS_WITH_OPENMP
#cmakedefine ANOTHER_THING_WITH_OPENMP和configure_file(),同时处理所有的定义。
https://stackoverflow.com/questions/32726639
复制相似问题