【发布时间】:2020-11-08 21:07:18
【问题描述】:
我在 CMake 和链接/编译我正在处理的项目的一部分方面遇到了问题。
目标的文件夹结构如下:
── sleeptimer
├── config
│ └── sl_sleeptimer_config.h
├── inc
│ └── sl_sleeptimer.h
└── src
├── sl_sleeptimer.c
├── sl_sleeptimer_hal.h
├── sl_sleeptimer_hal_prortc.c
├── sl_sleeptimer_hal_rtc.c
└── sl_sleeptimer_hal_rtcc.c
应添加此内容的 CMake 文件如下所示:
project(service)
add_library(${PROJECT_NAME}
sleeptimer/src/sl_sleeptimer.c)
target_include_directories(${PROJECT_NAME} PUBLIC
sleeptimer/config
sleeptimer/inc
sleeptimer/src)
target_link_libraries(${PROJECT_NAME} common_platform emlib)
但我在链接时遇到错误:
platform/service/libservice.a(sl_sleeptimer.c.obj): In function `sl_sleeptimer_init':
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:152: undefined reference to `sleeptimer_hal_init_timer'
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:153: undefined reference to `sleeptimer_hal_enable_int'
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:154: undefined reference to `sleeptimer_hal_get_timer_frequency'
platform/service/libservice.a(sl_sleeptimer.c.obj): In function `sl_sleeptimer_stop_timer':
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:313: undefined reference to `sleeptimer_hal_disable_int'
platform/service/libservice.a(sl_sleeptimer.c.obj): In function `sl_sleeptimer_get_tick_count':
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:428: undefined reference to `sleeptimer_hal_get_counter'
platform/service/libservice.a(sl_sleeptimer.c.obj): In function `set_comparator_for_next_timer':
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:1091: undefined reference to `sleeptimer_hal_enable_int'
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:1092: undefined reference to `sleeptimer_hal_set_compare'
platform/service/libservice.a(sl_sleeptimer.c.obj): In function `update_first_timer_delta':
/mnt/c/Users/username/Downloads/_test/gecko_sdk/platform/service/sleeptimer/src/sl_sleeptimer.c:1100: undefined reference to `sleeptimer_hal_get_counter'
所有未定义的函数都在sl_sleeptimer_hal.h 中声明。
我有点迷茫,因为我或多或少刚刚开始学习 make / CMake。
【问题讨论】:
-
您需要提供更多信息。具体来说,那些未定义的函数在哪里定义?看起来您可能需要将所有这些
.c文件添加到add_library。 -
将
sleeptimer/src添加到target_include_directories中不会生成该目录中的所有C 文件。它只是告诉编译器在那里寻找头文件。 -
未定义的函数是在
sl_sleeptimer_hal.h中定义的,由于sl_sleeptimer_hal.h@kaylum,我已将sleeptimer/src添加到target_include_directories -
你确定这些函数是在头文件中定义的吗?那将是不寻常的。头文件通常只包含函数原型,而不包含完整的函数实现/定义。
-
你添加所有其他文件是对的,我的错。感谢您指出这一点。标题中也没有定义这些函数,也是我的错,只是原型。