Создайте статическую библиотеку в C, используя CMAKE - PullRequest
0 голосов
/ 06 декабря 2018

Структура моего проекта такая:

  • DriverFolder

    • Src

      • "myDriver.c"
    • Inc

      • "myDriver.h"
  • ApplicationFolder

    • Src

      • "myApplication.c"
    • Inc

      • "myApplication.h"

Исходный файл "myApplication.c" содержит этот код:

#include "myApplication.h"
#include "myDriver.h" // Driver included from DriverFolder

uint8_t myFunction(void)
{

  uint8_t fooValue = getValueFromDriver(); // A function in myDriver.h
  return fooValue;
}

Заголовочный файл "myApplication.h" содержит макросы и прототипы

#ifndef LIBRARY_MYAPPLICATION_H  
#define LIBRARY_MYAPPLICATION_H

uint8_t myFunction(void);

#endif

Я хочу создать статическую библиотеку (.lib) с использованием CMAKE.Моя цель - включить эту библиотеку в другой проект.Другой проект выглядит так:

#include "myApplication.h"

int main(void)
{
  printf("%d", myFunction());
  return 0;
}

Я хотел бы знать, как подготовить CMakeLists.txt.На данный момент это то, что у меня есть:

cmake_minimum_required(VERSION 3.0.0)
project(MYAPPLICATION VERSION 0.1.0)
add_library(MYAPPLICATION STATIC myDriver.c myApplication.c)
  • Как добавить пути включения (DriverFolder / Inc и ApplicationFolder / Inc?
  • Что еще я должен добавить / изменить в CMakeLists.txt для генерации библиотеки?

1 Ответ

0 голосов
/ 06 декабря 2018

Статическая библиотека - это не что иное, как архив объектных файлов.Как таковые они не содержат заголовочных файлов сами по себе.Вместо этого, когда вы распространяете или устанавливаете библиотеку, вам также необходимо распространять или устанавливать общедоступные заголовочные файлы.Вам не нужно перечислять файлы заголовков при создании фактической библиотеки, поэтому вам не нужно добавлять их вообще.

Кроме того, если объектные файлы созданы из перечисленных исходных файлов (myDriver.c и myApplication.c) - это все, что вам нужно для реальной статической библиотеки, тогда показанный файл CMakeLists.txt - это все, что нужно для создания библиотеки.


Как уже упоминалось в комментарии, естьна самом деле пара вещей отсутствует, чтобы помочь создать объектные файлы , необходимые для библиотеки.Само создание статической библиотеки из объектных файлов в порядке.

Проблема в том, что ваши заголовочные файлы находятся в нестандартном расположении и что препроцессор компилятора не сможет их найти.не в том же каталоге, что и исходный файл.

Это означает, что вы должны указать CMake добавить флаги, указывающие компилятору, где расположены заголовочные файлы.Вы можете сделать это с помощью команды target_include_directories.

И вам также необходимо указать полный (относительный) путь к исходному файлу.

Таким образом, CMakeLists.txt file, вероятно, должен выглядеть примерно так:

cmake_minimum_required(VERSION 3.0.0)
project(MYAPPLICATION VERSION 0.1.0)
add_library(MYAPPLICATION STATIC DriverFolder/Src/myDriver.c ApplicationFolder/Src/myApplication.c)

# Tell CMake where the header files are located
target_include_directories(MYAPPLICATION PUBLIC DriverFolder/Inc ApplicationFolder/Inc)

Обратите внимание, что это позволяет только встроить исходные файлы в объектные файлы.Он не будет включать файлы заголовков внутри библиотеки или автоматически устанавливать их где-либо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...