diff --git a/rclcpp_components/cmake/rclcpp_components_register_node.cmake b/rclcpp_components/cmake/rclcpp_components_register_node.cmake index ed236916f0..1eceb5a857 100644 --- a/rclcpp_components/cmake/rclcpp_components_register_node.cmake +++ b/rclcpp_components/cmake/rclcpp_components_register_node.cmake @@ -28,10 +28,11 @@ macro(rclcpp_components_register_node target) cmake_parse_arguments( ARGS - "" + "FLUSH_BUFFER" "PLUGIN;EXECUTABLE" "" ${ARGN}) + set(flush_buffer ${ARGS_FLUSH_BUFFER}) set(component ${ARGS_PLUGIN}) set(node ${ARGS_EXECUTABLE}) _rclcpp_components_register_package_hook() diff --git a/rclcpp_components/src/node_main.cpp.in b/rclcpp_components/src/node_main.cpp.in index bfebc4aa7d..42a2c8a3f7 100644 --- a/rclcpp_components/src/node_main.cpp.in +++ b/rclcpp_components/src/node_main.cpp.in @@ -25,6 +25,10 @@ int main(int argc, char * argv[]) { + std::string flush_buffer = "@flush_buffer@"; + if (!(flush_buffer.compare("TRUE"))) { + setvbuf(stdout, NULL, _IONBF, BUFSIZ); + } auto args = rclcpp::init_and_remove_ros_arguments(argc, argv); rclcpp::Logger logger = rclcpp::get_logger(NODE_MAIN_LOGGER_NAME); rclcpp::executors::SingleThreadedExecutor exec;