Как автоматически скомпилировать исходные файлы из пути к библиотеке без создания файлов .o, .a и .so? - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь скомпилировать файл main.cpp, в котором есть некоторые сторонние библиотеки (некоторые построены мной), но я не могу оставить файлы .o, .a или .so висходные каталоги.

Мои тесты и поиски привели меня к странному решению, где я должен включить каждый .cpp файл в g++ командную строку.

./main$ g++ -o test.run -I./../src ./../src/*.cpp main.cpp

Я нашел кое-что об использовании опции -L компилятора g++, но, насколько я понимаю, он работает только со статическими архивными библиотеками (.a) или общими объектами (.so).

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

Есть ли способ скомпилировать эти файлы, не добавляя каждый .cpp файл вручную?Учитывая, что, возможно, не все файлы должны быть включены (потому что моя конечная цель - создать симулятор).Может быть что-то вроде:

./main$ g++ -o test.run -I./../src -L./../src/ main.cpp

Кроме того, какие советы по поводу того, какие теги компиляции могут быть полезны в этом случае?


PS. Я могу справиться сперекомпиляция при каждом изменении, с make это нормально, но так как я собираюсь использовать некоторые директивы препроцессора, я не чувствую себя комфортно, потому что иногда он должен быть готов к запуску в arduino, иногда в ПК;

PPS .: Моя конечная цель - создать Arduino простой порт и программный симулятор , который уже работает, и это главная причина, почему я боюсь допустить эти дополнительные файлы,библиотеки должны продолжать компиляцию в arduino и должны оставаться в пути включения arduino.


Мое тестовое дерево каталогов:

.
├── main
│   └── main.cpp
└── src
    ├── source.cpp
    └── source.h

main.cpp содержимое файла:

#include <source.h>

int main()
{
    Just one;
    return 0;
}

source.h содержимое файла:

#ifndef _SOURCE_H
#define _SOURCE_H

#include <iostream>

class Just
{
public:
    Just();
};

#endif

souce.cpp содержимое файла:

#include "source.h"

Just::Just()
{
    std::cout << "It Works!" << std::endl;
}
...