RT-Thread论坛
直播中

chunhuahua

9年用户 1419经验值
擅长:接口/总线/驱动
私信 关注
[问答]

RT_Thread Studio到底是用什么工具构建的?Scons还是Cmake?

因为我在RTThread Studio上新建5.1.0版本工程时遇到了warning,最后找到是没有定义_RT_KERNEL_SOURCE这个宏定义导致的。

  • make -j16 all
  • arm-none-eabi-gcc "../rt-thread/src/klibc/kstdio.c"
  • arm-none-eabi-gcc "../rt-thread/src/klibc/kstring.c"
  • arm-none-eabi-gcc "../rt-thread/src/clock.c"
  • arm-none-eabi-gcc "../rt-thread/src/components.c"
  • arm-none-eabi-gcc "../rt-thread/src/idle.c"
  • arm-none-eabi-gcc "../rt-thread/src/ipc.c"
  • arm-none-eabi-gcc "../rt-thread/src/irq.c"
  • arm-none-eabi-gcc "../rt-thread/src/kservice.c"
  • ../rt-thread/src/klibc/kstdio.c:294:9: warning: unknown option after '#pragma GCC diagnostic' kind [-Wpragmas]
  • #pragma GCC diagnostic ignored "-Wimplicit-fallthrough"
  •          ^
  • arm-none-eabi-gcc "../rt-thread/src/mem.c"
  • ../rt-thread/src/clock.c: In function 'rt_tick_increase':
  • ../rt-thread/src/clock.c:100:5: warning: implicit declaration of function 'rt_sched_tick_increase' [-Wimplicit-function-declaration]
  •      rt_sched_tick_increase();
  •      ^
  • arm-none-eabi-gcc "../rt-thread/src/mempool.c"
  • arm-none-eabi-gcc "../rt-thread/src/object.c"
  • ../rt-thread/src/ipc.c: In function 'rt_susp_list_dequeue':
  • ../rt-thread/src/ipc.c:118:17: warning: implicit declaration of function 'rt_sched_thread_ready' [-Wimplicit-function-declaration]
  •          error = rt_sched_thread_ready(thread);
  •                  ^
  • ../rt-thread/src/ipc.c: In function 'rt_susp_list_enqueue':
  • ../rt-thread/src/ipc.c:262:21: warning: implicit declaration of function 'rt_sched_thread_get_curr_prio' [-Wimplicit-function-declaration]
  •                  if (rt_sched_thread_get_curr_prio(thread) < rt_sched_thread_get_curr_prio(sthread))
  •                      ^
  • ../rt-thread/src/ipc.c: In function '_thread_get_mutex_priority':
  • ../rt-thread/src/ipc.c:849:27: warning: implicit declaration of function 'rt_sched_thread_get_init_prio' [-Wimplicit-function-declaration]
  •      rt_uint8_t priority = rt_sched_thread_get_init_prio(thread);
  •                            ^
  • ../rt-thread/src/ipc.c: In function '_thread_update_priority':
  • ../rt-thread/src/ipc.c:876:11: warning: implicit declaration of function 'rt_sched_thread_change_priority' [-Wimplicit-function-declaration]
  •      ret = rt_sched_thread_change_priority(thread, priority);
  •            ^
  • ../rt-thread/src/ipc.c:878:31: warning: implicit declaration of function 'rt_sched_thread_is_suspended' [-Wimplicit-function-declaration]
  •      while ((ret == RT_EOK) && rt_sched_thread_is_suspended(thread))
  •                                ^
  • arm-none-eabi-gcc "../rt-thread/src/scheduler_comm.c"
  • arm-none-eabi-gcc "../rt-thread/src/scheduler_up.c"
  • arm-none-eabi-gcc "../rt-thread/src/thread.c"
  • arm-none-eabi-gcc "../rt-thread/src/timer.c"
  • arm-none-eabi-gcc "../rt-thread/libcpu/arm/cortex-m4/context_gcc.S"
  • ../rt-thread/src/scheduler_comm.c: In function 'rt_sched_thread_init_ctx':
  • ../rt-thread/src/scheduler_comm.c:30:5: warning: implicit declaration of function 'rt_sched_thread_init_priv' [-Wimplicit-function-declaration]
  •      rt_sched_thread_init_priv(thread, tick, priority);
  •      ^
  • ../rt-thread/src/scheduler_comm.c: In function 'rt_sched_thread_ready':
  • ../rt-thread/src/scheduler_comm.c:140:13: warning: implicit declaration of function 'rt_sched_insert_thread' [-Wimplicit-function-declaration]
  •              rt_sched_insert_thread(thread);
  •              ^
  • ../rt-thread/src/scheduler_comm.c: In function 'rt_sched_thread_change_priority':
  • ../rt-thread/src/scheduler_comm.c:184:9: warning: implicit declaration of function 'rt_sched_remove_thread' [-Wimplicit-function-declaration]
  •          rt_sched_remove_thread(thread);
  •          ^
  • arm-none-eabi-gcc "../rt-thread/libcpu/arm/cortex-m4/cpuport.c"
  • arm-none-eabi-gcc "../rt-thread/libcpu/arm/common/atomic_arm.c"
  • ../rt-thread/src/scheduler_up.c: In function 'rt_system_scheduler_start':
  • ../rt-thread/src/scheduler_up.c:180:5: warning: implicit declaration of function 'rt_sched_remove_thread' [-Wimplicit-function-declaration]
  •      rt_sched_remove_thread(to_thread);
  •      ^
  • ../rt-thread/src/scheduler_up.c: In function 'rt_schedule':
  • ../rt-thread/src/scheduler_up.c:249:21: warning: implicit declaration of function 'rt_sched_insert_thread' [-Wimplicit-function-declaration]
  •                      rt_sched_insert_thread(from_thread);
  •                      ^
  • ../rt-thread/src/scheduler_up.c: At top level:
  • ../rt-thread/src/scheduler_up.c:370:6: warning: conflicting types for 'rt_sched_insert_thread'
  • void rt_sched_insert_thread(struct rt_thread *thread)
  •       ^
  • ../rt-thread/src/scheduler_up.c:249:21: note: previous implicit declaration of 'rt_sched_insert_thread' was here
  •                      rt_sched_insert_thread(from_thread);
  •                      ^
  • ../rt-thread/src/scheduler_up.c:422:6: warning: conflicting types for 'rt_sched_remove_thread'
  • void rt_sched_remove_thread(struct rt_thread *thread)
  •       ^
  • ../rt-thread/src/scheduler_up.c:180:5: note: previous implicit declaration of 'rt_sched_remove_thread' was here
  •      rt_sched_remove_thread(to_thread);
  •      ^
  • arm-none-eabi-gcc "../rt-thread/libcpu/arm/common/div0.c"
  • ../rt-thread/src/thread.c: In function '_thread_exit':
  • ../rt-thread/src/thread.c:92:5: warning: implicit declaration of function 'rt_sched_remove_thread' [-Wimplicit-function-declaration]
  •      rt_sched_remove_thread(thread);
  •      ^
  • ../rt-thread/src/thread.c:98:5: warning: implicit declaration of function 'rt_sched_thread_close' [-Wimplicit-function-declaration]
  •      rt_sched_thread_close(thread);
  •      ^
  • In file included from ../rt-thread/src/thread.c:41:0:
  • ../rt-thread/src/thread.c: In function '_thread_timeout':
  • ../rt-thread/src/thread.c:134:15: warning: implicit declaration of function 'rt_sched_thread_is_suspended' [-Wimplicit-function-declaration]
  •      RT_ASSERT(rt_sched_thread_is_suspended(thread));
  •                ^
  • D:softwareRT-ThreadStudioworkspace510rt-threadinclude/rtthread.h:782:7: note: in definition of macro 'RT_ASSERT'
  • if (!(EX))
  •        ^
  • ../rt-thread/src/thread.c:142:5: warning: implicit declaration of function 'rt_sched_insert_thread' [-Wimplicit-function-declaration]
  •      rt_sched_insert_thread(thread);
  •      ^
  • ../rt-thread/src/thread.c: In function '_thread_init':
  • ../rt-thread/src/thread.c:193:5: warning: implicit declaration of function 'rt_sched_thread_init_ctx' [-Wimplicit-function-declaration]
  •      rt_sched_thread_init_ctx(thread, tick, priority);
  •      ^
  • ../rt-thread/src/thread.c: In function 'rt_thread_startup':
  • ../rt-thread/src/thread.c:404:5: warning: implicit declaration of function 'rt_sched_thread_startup' [-Wimplicit-function-declaration]
  •      rt_sched_thread_startup(thread);
  •      ^
  • ../rt-thread/src/thread.c: In function '_thread_detach':
  • ../rt-thread/src/thread.c:452:21: warning: implicit declaration of function 'rt_sched_thread_get_stat' [-Wimplicit-function-declaration]
  •      thread_status = rt_sched_thread_get_stat(thread);
  •                      ^
  • ../rt-thread/src/thread.c: In function 'rt_thread_yield':
  • ../rt-thread/src/thread.c:583:5: warning: implicit declaration of function 'rt_sched_thread_yield' [-Wimplicit-function-declaration]
  •      rt_sched_thread_yield(rt_thread_self());
  •      ^
  • ../rt-thread/src/thread.c: In function 'rt_thread_control':
  • ../rt-thread/src/thread.c:786:21: warning: implicit declaration of function 'rt_sched_thread_change_priority' [-Wimplicit-function-declaration]
  •              error = rt_sched_thread_change_priority(thread, *(rt_uint8_t *)arg);
  •                      ^
  • ../rt-thread/src/thread.c:819:20: warning: implicit declaration of function 'rt_sched_thread_bind_cpu' [-Wimplicit-function-declaration]
  •              return rt_sched_thread_bind_cpu(thread, cpu);
  •                     ^
  • ../rt-thread/src/thread.c: In function 'rt_thread_suspend_to_list':
  • ../rt-thread/src/thread.c:949:5: warning: implicit declaration of function 'rt_sched_thread_timer_stop' [-Wimplicit-function-declaration]
  •      rt_sched_thread_timer_stop(thread);d
  •      ^
  • ../rt-thread/src/thread.c: In function 'rt_thread_resume':
  • ../rt-thread/src/thread.c:1007:13: warning: implicit declaration of function 'rt_sched_thread_ready' [-Wimplicit-function-declaration]
  •      error = rt_sched_thread_ready(thread);
  •              ^
  • arm-none-eabi-gcc "../rt-thread/libcpu/arm/common/showmem.c"
  • ../rt-thread/src/timer.c: In function 'rt_timer_start':
  • ../rt-thread/src/timer.c:516:9: warning: implicit declaration of function 'rt_sched_thread_timer_start' [-Wimplicit-function-declaration]
  •          rt_sched_thread_timer_start(thread);
  •          ^


然后找到了这个issues:https://github.com/RT-Thread/rt-thread/issues/9536
可是我把cmake.py内容复制过来之后,还是同样的问题,没有任何改变,于是我在src文件夹的sconscript文件加入了print打印语句,但看不到任何打印,继而又试了env.Print()什么的,一样看不到打印内容。
于是我直接把sconscript文件删掉,又把SConstruct删掉,最后重新构建,还是一样没有任何区别(修改过多处源文件结果都一样)
最后我不禁怀疑,其实studio使用的就是cmake。
是这样吗?


回帖(1)

h1654155275.5741

2025-10-20 17:04:21

RT-Thread Studio 的构建工具取决于工程类型和配置:




  1. 默认构建系统

    RT-Thread Studio 主要使用 Scons 作为构建工具。Scons 是 RT-Thread 官方推荐的构建系统,用于管理内核、组件和库的编译过程。创建基于开发板/芯片的标准工程时,Studio 会自动生成 Scons 脚本(SConstructSConscript 文件)。




  2. CMake 的使用

    部分特殊工程(如某些第三方库或适配其他框架的项目)可能使用 CMake,但非 RT-Thread 内核工程的主流选择。标准 RT-Thread 工程优先用 Scons。




  3. 您的警告问题分析

    您遇到的 _RT_KERNEL_SOURCE 未定义警告,是因为该宏用于标识内核源码编译(区分用户态/内核态)。解决方法如下:


    步骤 1:全局定义宏

    在 RT-Thread Studio 中配置预定义宏:



    • 右键工程 → PropertiesC/C++ BuildSettings

    • 选择 Tool SettingsMCU GCC CompilerPreprocessor

    • Defined Symbols (-D) 中添加 _RT_KERNEL_SOURCE


    步骤 2:检查 rtconfig.h

    确保 rtconfig.h(工程配置头文件)中有以下定义:


    #define RT_USING_USERMAIN // 若使用组件初始化特性需启用



  4. 构建流程说明

    您日志中的 arm-none-eabi-gcc ... 命令是 Scons 调用的底层编译步骤。Scons 负责解析依赖、生成编译命令(GCC)并链接,最终输出固件。




总结建议:



  • 构建工具:RT-Thread Studio 标准工程 使用 Scons

  • 修复警告

    按上述步骤在工程属性中添加 _RT_KERNEL_SOURCE 宏定义,确保内核函数正确编译。


完成配置后重新构建工程,警告应被消除。如问题依旧,可检查是否遗漏了 RT-Thread 的配置选项(如 RT_USING_USERMAIN)。

举报

更多回帖

×
20
完善资料,
赚取积分