Изменение системного заголовка и файлов пользовательских заголовков - PullRequest
0 голосов
/ 18 октября 2010
gcc 4.4.5 c89

Я недавно скачал и установил log4c на мою машину для разработки. Я поставил все заголовки и включил в следующие каталоги.

project_name/tools/log4c/inc
project_name/tools/log4c/libs

Однако, как я установил заголовки, где в системном пути:

/usr/include/log4c/*.h

Так что в моем проекте, когда я включал layout.h. layout.h будет включать в этот системный путь следующий заголовок.

#include <log4c/logging_event.h>

Я создал ту же структуру каталогов на целевой машине, что и для своей разработки для tools/inc и tools/lib.

Однако он не скомпилируется, потому что я не установил log4c на целевой машине, поэтому системный путь для log4c не существует. Однако пользователь целевого компьютера не должен устанавливать log4c. Все должно работать из коробки.

Так что я думаю, что хорошей идеей является редактирование всех заголовков. из этого:

#include <log4c/logging_event.h>

до

#include "logging_event.h"

Все заголовки находятся в каталоге inc, поэтому я не буду использовать системный путь.

Мой вопрос - это хорошая идея, чтобы поместить все заголовки в один каталог и отредактировать их так, чтобы они указывали на этот единственный каталог inc?

Большое спасибо за любой совет,

Ответы [ 2 ]

1 голос
/ 25 октября 2010

Похоже, библиотека log4c имеет структуру каталогов

/src
  /log4c.h
  /log4c
     /lots of *.h and *.c

Так что он предназначен для включения его заголовков как

 #include <log4c.h>

или

 #include <log4c/logging_event.h>

как вы сделали. Важно делать вещи таким образом; если вместо этого вы просто пишете

 #include <logging_event.h>

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

Поэтому я рекомендую придерживаться структуры каталогов, которую использует log4c. В вашем случае:

project_name/tools/log4c/inc/log4c/logging_event.h

и т.д.. (как предложил @Jander). Правильный способ добавить каталог включения с помощью gcc - -I:

gcc -Iproject_name/tools/log4c/inc foo.c
1 голос
/ 18 октября 2010

Я бы оставил заголовки в покое - их изменение потенциально подвержено ошибкам и отнимает много времени, особенно если вы хотите обновить свою версию log4c в какой-то момент.

Правильно ли я понимаю, чтоте же заголовки, которые находятся в /usr/include/log4c, также находятся в вашем каталоге project_name/tools/log4c/inc?Если это так, переместите их в project_name/tools/log4c/inc/log4c и добавьте включаемый путь к командной строке gcc, используя флаг -I:

gcc -I project_name/tools/log4c/inc myprog.c etc etc

Мы перемещаем файлы в log4c/inc/log4c, чтобы<log4c/logging_event.h> все еще может совпадать в каталоге log4c в log4c/inc/.

РЕДАКТИРОВАТЬ : я изначально набрал -L как флаг, который устанавливает пути поиска библиотеки, а не включает файлпути поиска.-I - правильный флаг для этого случая.

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