Я C Newb
Я пишу много кода на динамических языках (javascript, python, haskell и т. Д.), Но сейчас я изучаю C для аспирантуры и понятия не имею, что делаю.
Проблема
Первоначально я собирал весь свой исходный код в одном каталоге, используя make-файл, который работал довольно хорошо. Тем не менее, мой проект развивается, и я хотел бы разделить источник на несколько каталогов (модульные тесты, утилиты, ядро и т. Д.). Например, мое дерево каталогов может выглядеть следующим образом:
.
|-- src
| |-- foo.c
| |-- foo.h
| `-- main.c
`-- test
`-- test_foo.c
test/test_foo.c
использует как src/foo.c
, так и src/foo.h
. Используя make-файлы, какой лучший / стандартный способ построить это? Предпочтительно было бы одно правило для построения проекта и одно для построения тестов.
Примечание
Я знаю, что есть другие способы сделать это, включая autoconf и другие автоматические решения. Однако я хотел бы понять, что происходит, и иметь возможность писать make-файлы с нуля, несмотря на его возможную непрактичность.
Любые рекомендации или советы будут оценены. Спасибо!
[редактировать]
Итак, три решения, приведенные к настоящему моменту, таковы:
- Поместите глобально используемые заголовочные файлы в параллельную директорию
include
- используйте путь в
#include
satement как в #include "../src/foo.h"
- используйте переключатель
-I
, чтобы сообщить компилятору о включаемых местоположениях
Пока мне нравится решение с коммутатором -I
, потому что оно не требует изменения исходного кода при изменении структуры каталогов.