cmake_minimum_required(VERSION 2.8.3) project(plan_env) add_compile_definitions(USE_MID360_CLOUD) set(CMAKE_BUILD_TYPE "Release") ADD_COMPILE_OPTIONS(-std=c++11 ) ADD_COMPILE_OPTIONS(-std=c++14 ) set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g") find_package(OpenCV REQUIRED) find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs visualization_msgs cv_bridge message_filters ) find_package(Eigen3 REQUIRED) find_package(PCL 1.7 REQUIRED) catkin_package( INCLUDE_DIRS include LIBRARIES plan_env CATKIN_DEPENDS roscpp std_msgs DEPENDS OpenCV # DEPENDS system_lib ) include_directories( SYSTEM include ${catkin_INCLUDE_DIRS} ${Eigen3_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ) link_directories(${PCL_LIBRARY_DIRS}) add_library( plan_env src/grid_map.cpp src/raycast.cpp src/obj_predictor.cpp ) target_link_libraries( plan_env ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${OpenCV_LIBS} ) add_executable(obj_generator src/obj_generator.cpp ) target_link_libraries(obj_generator ${catkin_LIBRARIES} )如何修改正确将宏定义USE_MID360_CLOUD添加到项目中所有目标
时间: 2025-09-04 08:09:46 AIGC 浏览: 25
你当前的 CMakeLists.txt 中使用了 `add_compile_definitions(USE_MID360_CLOUD)`,这个命令在 CMake 3.12 及以上版本中是有效的,它会将宏定义添加到所有目标中。
但如果你使用的是更早版本的 CMake(比如你设置的 `cmake_minimum_required(VERSION 2.8.3)`),这个命令可能不被支持。为了确保兼容性和正确地将宏定义添加到所有目标中,可以考虑以下几种方式:
---
### ✅ 推荐修改方式(兼容旧版本)
将 `add_compile_definitions(USE_MID360_CLOUD)` 替换为:
```cmake
add_definitions(-DUSE_MID360_CLOUD)
```
这是旧版本 CMake 中推荐的方式,用于添加全局宏定义,适用于所有后续定义的目标。
---
### 完整修改后的 CMakeLists.txt 片段如下:
```cmake
cmake_minimum_required(VERSION 2.8.3)
project(plan_env)
add_definitions(-DUSE_MID360_CLOUD) # ✅ 替换为 add_definitions
set(CMAKE_BUILD_TYPE "Release")
ADD_COMPILE_OPTIONS(-std=c++11 )
ADD_COMPILE_OPTIONS(-std=c++14 )
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wall -g")
find_package(OpenCV REQUIRED)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
visualization_msgs
cv_bridge
message_filters
)
find_package(Eigen3 REQUIRED)
find_package(PCL 1.7 REQUIRED)
catkin_package(
INCLUDE_DIRS include
LIBRARIES plan_env
CATKIN_DEPENDS roscpp std_msgs
DEPENDS OpenCV
# DEPENDS system_lib
)
include_directories(
SYSTEM
include
${catkin_INCLUDE_DIRS}
${Eigen3_INCLUDE_DIRS}
${PCL_INCLUDE_DIRS}
${OpenCV_INCLUDE_DIRS}
)
link_directories(${PCL_LIBRARY_DIRS})
add_library( plan_env
src/grid_map.cpp
src/raycast.cpp
src/obj_predictor.cpp
)
target_link_libraries( plan_env
${catkin_LIBRARIES}
${PCL_LIBRARIES}
${OpenCV_LIBS}
)
add_executable(obj_generator
src/obj_generator.cpp
)
target_link_libraries(obj_generator
${catkin_LIBRARIES}
)
```
---
### ✅ 总结
- 如果你使用的是 CMake < 3.12,请使用 `add_definitions(-DXXX)`。
- 如果你使用的是 CMake ≥ 3.12,可以使用 `add_compile_definitions(XXX)`,它更简洁、现代。
- 确保你的 CMake 版本与语法兼容。
---
阅读全文
相关推荐



















