【发布时间】:2015-12-20 00:11:07
【问题描述】:
目前我的 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())。
问题:
这是正确的做法还是有更优雅的方式来处理这种情况?
我是否可以省略两者之一,或者我真的必须将两者结合起来才能满足我上面列出的要求?
谢谢!
【问题讨论】:
-
你用对了。有条件的
add_definitions()的替代方案可以是无条件的set(ENABLE_OPENMP ${NORMALS_WITH_OPENMP})与文件中的configure_file()结合,包含行#cmakedefine ENABLE_OPENMP(并将结果文件包含到您的源/标题中)。但是没有条件附加CMAKE_CXX_FLAGS的替代方法。这是否也回答了您的第二个问题,还是有其他含义?
标签: c++ c macros cmake conditional-compilation