cmake неопределенное имя типа loc_t (gpslib) - PullRequest
0 голосов
/ 07 сентября 2018

Вот мой фактический код:

Я пытаюсь создать систему сборки cmake для gpslib .

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 из FindLibM.cmake


Изменить из-за ответа компора:

  • добавлены библиотеки ссылок для gps_lib
  • удалено LIBM_LIBRARIES из библиотеки ссылок PROJECT_NAME

ничего не меняет

Благодаря @KamilCuk я решил проблему.

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

должен быть добавлен в файл cmake

Спасибо всем, кто помог мне найти мои ошибки!

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Мне пришлось связать libm (math.h) с целевым gps_lib.

link_libraries(m) 

или

target_link_libraries(gps_lib m) (only for the target gps_lib)
0 голосов
/ 07 сентября 2018

Первый target_sources должен быть

target_include_directories(gps_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src)

Кажется, он не может найти определение loc_t, как определено в 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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...