Заголовочные файлы в нескольких каталогах: лучшие практики

Попробуйте изменить тип действия на «Переписать» вместо «Перенаправить».

Перенаправление всегда приводит к отправке заголовка перенаправления в браузер. Это изменит URL в адресной строке браузера, и браузер затем выдаст HTTP GET для нового адреса. С HTTP GET никакие данные формы / публикации никогда не отправляются; предполагается, что все аргументы находятся в строке запроса URL.

Если вы хотите избежать перенаправления и использовать истинное переписывание, измените ваш web.config на использование action = rewrite. При использовании этого метода заголовок перенаправления не отправляется обратно в браузер, адресная строка браузера никогда не изменяется, а IIS просто перенаправляет текущий поток запросов в другое место.

8
задан Tim Post 28 February 2009 в 16:48
поделиться

4 ответа

Для test_foo.c просто необходимо сказать компилятор, где заголовочные файлы могут быть найдены. Например.

gcc -I../src -c test_foo.c

Затем компилятор также изучит этот каталог для нахождения заголовочных файлов. В test_foo.c Вы пишете затем:

#include "foo.h"

Править: Для соединения против foo.c, на самом деле против foo.o, необходимо упомянуть это в списке объектного файла. Я предполагаю, что у Вас уже есть объектные файлы, затем сделайте после этого:

gcc test_foo.o ../src/foo.o -o test
3
ответ дан 5 December 2019 в 23:17
поделиться

Распространенный способ сделать это для заголовочных файлов, используемых единственным файлом C, который назовут тем же как это файл C и в том же каталоге, и для заголовочных файлов, используемых многими файлами C (особенно используемые целым проектом), чтобы быть в каталоге include это параллельно исходному каталогу C.

0
ответ дан 5 December 2019 в 23:17
поделиться

Ваш тестовый файл должен просто включать заголовочные файлы непосредственно с помощью относительных путей, как это:

#include "../src/foo.h"
0
ответ дан 5 December 2019 в 23:17
поделиться

Я также редко использую автоинструменты GNU. Вместо этого я помещу единственный make-файл ручной работы в корневой каталог.

Для получения всех заголовков в исходном каталоге используйте что-то вроде этого:

get_headers = $(wildcard $(1)/*.h)
headers := $(call get_headers,src)

Затем можно использовать следующее, чтобы заставить объектные файлы в тестовом каталоге зависеть от этих заголовков:

test/%.o : test/%.c $(headers)
    gcc -std=c99 -pedantic -Wall -Wextra -Werror $(flags) -Isrc -g -c -o $@ $<

Как Вы видите, я не поклонник встроенных директив. Также отметьте -I переключатель.

Получение списка объектных файлов для каталога немного более сложно:

get_objects = $(patsubst %.c,%.o,$(wildcard $(1)/*.c))
test_objects = $(call get_objects,test)

Следующее правило сделало бы объекты для Ваших тестов:

test : $(test_objects)

test правило не должно только делать объектные файлы, но исполняемые файлы. Как записать, что правило зависит от структуры Ваших тестов: Например, Вы могли создать исполняемый файл для каждого .c файл или просто единственный, который тестирует все.

2
ответ дан 5 December 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: