结合 CMake option() 与 add_definitions()
Combining CMake option() with add_definitions()
目前我的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
以相同的方式 enabled/disabled。
我对此的要求是能够简要描述 OpenMP 支持(使用 option()
)然后如果选项设置为 ON 添加ENABLE_OPENMP
定义,以便我的代码以不同方式编译(使用 add_definitions()
)。
问题:
这是正确的做法还是有更优雅的处理方式?
我可以省略两者之一,还是我真的必须坚持两者结合才能满足我上面列出的要求?
谢谢!
如果您仅为此 NORMALS
功能使用 OpenMP,没关系。否则,您实际上混合了两件事 - 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()
它,一次处理所有定义。
目前我的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
以相同的方式 enabled/disabled。
我对此的要求是能够简要描述 OpenMP 支持(使用 option()
)然后如果选项设置为 ON 添加ENABLE_OPENMP
定义,以便我的代码以不同方式编译(使用 add_definitions()
)。
问题:
这是正确的做法还是有更优雅的处理方式?
我可以省略两者之一,还是我真的必须坚持两者结合才能满足我上面列出的要求?
谢谢!
如果您仅为此 NORMALS
功能使用 OpenMP,没关系。否则,您实际上混合了两件事 - 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()
它,一次处理所有定义。