首页 > 解决方案 > cmake 未定义类型名 loc_t (gpslib)

问题描述

这是我的实际代码:

我正在尝试为gpslib创建一个 cmake 构建系统。

cmake_minimum_required(VERSION 2.6)
set(PROJECT_NAME LOGGER)
project(${PROJECT_NAME})


set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "res/cmake/Modules/")


add_library(gps_lib STATIC "")

target_link_libraries(gps_lib m)
target_include_directories(gps_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${LIBM_INCLUDE_DIRS})

target_sources(gps_lib PUBLIC 
           ${CMAKE_CURRENT_SOURCE_DIR}/src/gps.h
           ${CMAKE_CURRENT_SOURCE_DIR}/src/nmea.h
           ${CMAKE_CURRENT_SOURCE_DIR}/src/serial.h)

target_sources(gps_lib PRIVATE 
           ${CMAKE_CURRENT_SOURCE_DIR}/src/gps.c
           ${CMAKE_CURRENT_SOURCE_DIR}/src/nmea.c
           ${CMAKE_CURRENT_SOURCE_DIR}/src/serial.c)
target_link_libraries(gps_lib PUBLIC ${LIBM_LIBRARIES})

add_executable(${PROJECT_NAME} examples/position_logger.c)
target_link_libraries(${PROJECT_NAME}gps_lib)

有人知道如何构建这个项目吗?

这是错误消息:

/usr/bin/ld: libgps_lib.a(gps.c.o): in function `gps_deg_dec': gps.c:(.text+0x2d5): undefined reference to `round'
/usr/bin/ld: gps.c:(.text+0x312): undefined reference to `round'

在 res/cmake/Modules 中有一个 FindLibM.cmake Module 来自FindLibM.cmake


由于compor answear而编辑:

不会改变任何东西

感谢@KamilCuk,我解决了这个问题。

link_libraries(m) or target_link_libraries(gps_lib m) (only for the target gps_lib)

必须添加到 cmake 文件中

感谢所有帮助我找到错误的人!

标签: cmake

解决方案


第一个target_sources应该是

target_include_directories(gps_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)

似乎它找不到loc_tas 中定义的定义gps.h,因此上面的行将通知目标包含目录以搜索它。

此外,最后一行应该是

target_link_libraries(${PROJECT_NAME} ${LIBM_LIBRARIES} gps_lib)

没有${gps_lib}变量,gps_lib是目标的名称。


由于OP编辑而更新

我不确定您是否更改了示例,但您引用的初始示例代码不包括math.h因此数学库应gps_lib仅用作目标的依赖项

target_link_libraries(gps_lib PUBLIC ${LIBM_LIBRARIES})

推荐阅读