如何在CMake中修改PCL自动添加的-march=native编译选项?
解决PCL自动添加-march=native导致的跨设备运行问题
下面是几种可行的CMake配置方案,直接解决编译选项优先级的问题:
方案1:直接替换已存在的编译选项
在执行find_package(PCL)之后,把CMAKE_CXX_FLAGS里的-march=native替换成-march=x86-64,从根本上改掉这个选项:
find_package(PCL REQUIRED COMPONENTS ...) # 全局替换CMAKE_CXX_FLAGS中的-march=native string(REPLACE "-march=native" "-march=x86-64" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") # 如果只针对某个特定目标,也可以单独修改目标属性 target_compile_options(你的目标名称 PRIVATE "-march=x86-64") # 同时移除目标上可能存在的-march=native get_target_property(TARGET_FLAGS 你的目标名称 COMPILE_OPTIONS) list(REMOVE_ITEM TARGET_FLAGS "-march=native") set_target_properties(你的目标名称 PROPERTIES COMPILE_OPTIONS "${TARGET_FLAGS}")
方案2:提前禁用PCL的原生优化
部分PCL版本支持通过预定义变量关闭自动添加的-march=native,在find_package之前设置即可:
set(PCL_ENABLE_NATIVE_OPTIMIZATIONS OFF) find_package(PCL REQUIRED COMPONENTS ...)
方案3:利用编译器选项优先级兜底
如果上面两种方法都不生效,可以把-march=x86-64追加到CMAKE_CXX_FLAGS的末尾——gcc/clang会以最后出现的同类型选项为准,自动覆盖之前的-march=native:
# 放在所有find_package操作之后 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64")
内容的提问来源于stack exchange,提问作者user16138748
相关产品推荐
相关产品推荐

