Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> демон под BSD для вычислений 
V
    Опции темы
bsa
Дата 12.9.2007, 15:10 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(Larrikin @ 12.9.2007,  14:00)
не могу найти инфу, может ли функция возвращать массив?
или, например, указатель на масссив?

Код
int* process(const char *txt)
{
....
      int * array = (int*)malloc(sizeof(int)*size);
....
      return array;
}

Если писать на с++, то там никаких проблем нет, если возвращать std::vector
PM   Вверх
Larrikin
Дата 21.9.2007, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



разбил этот код на файлы getdata.c main.c потом, видимо,  будет ncalc.c и output.c

думаю, еще нужен будет заголовок типа ncalc.h для того, чтобы определния типа #define MAX_DATALINE 100 не надо было править во всех файлах...

подскажите в Сети толковое руководство по созданию Makefile для BSD, а то везде только перевод "Мини-руководство по созданию Makefile-ов" который обещает научить в начале, но не делает этого...

че-то не работает сборка по примерам из этого мини-руководства, а других нету на русском или не там ищу...

да хоть бы и не на русском, только чтобы внятнее мана было

о BSD много доки про makefile для портирования, а как мне простую сборку сделать-то?

Это сообщение отредактировал(а) Larrikin - 21.9.2007, 13:24
PM MAIL WWW ICQ   Вверх
bsa
Дата 21.9.2007, 18:53 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Larrikin, попробуй воспользоваться Automake...

На самом деле формат Makefile достаточно прост (если не делать всяких условных сборок):
Код
<Цель>: <зависимость1> <зависимость2>...
    command1
    command2
    ....
    commandN
Обрати внимание, что перед commandX должна стоять табуляция (не пробелы) - это важно.
Например, у тебя есть 3 файла file1.c, file2.c и file3.c, их надо скомпилировать в myprog:
Код
all: myprog
myprog: file1.o file2.o file3.o
    gcc -o $@ $^
file1.o: file1.c
    gcc -c -o $@ $<
file2.o: file2.c
    gcc -c -o $@ $<
file3.o: file3.c
    gcc -c -o $@ $<
$@ - это название цели, $^ - все зависимости, $< - первая зависимость
PM   Вверх
Larrikin
Дата 21.9.2007, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



вот вроде нашел интересную статью http://palm.opennet.ru/base/dev/auto_makefile.txt.html
но не получается заставить собирать мои жалкие несколько файлов...

что не так в таком скрипте?
Код


#!/usr/bin/make -f
SOURCES := $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)
PROJNAME = $(notdir $(PWD))
BINARY= $(PROJNAME)

all: $(PROJNAME)

$(BINARY): $(OBJECTS)
    $(CC) $(LDFLAGS) -o $@ $(OBJECTS)

# а здеся мы генерим зависимости от заголовков
#include $(SOURCES:.c=.d)
#%.d: %.c
#    gcc -MM -MG $< \
#    | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
#    [ -s $@ ] || rm -f $@

clean:
    rm -f *.d *.o

.PHONY: clean

PM MAIL WWW ICQ   Вверх
JackYF
Дата 22.9.2007, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(Larrikin @  21.9.2007,  22:57 Найти цитируемый пост)
но не получается заставить собирать мои жалкие несколько файлов...

телепатов нееетт.... логи с ошибками приводи

Приведи имена всех файлов проекта. Возможно, тебе поможет замена

Цитата(Larrikin @  21.9.2007,  22:57 Найти цитируемый пост)
SOURCES := $(wildcard *.c)

на
Цитата

SOURCES := $(wildcard *.cpp)

если у тебя .cpp - файлы.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Larrikin
Дата 22.9.2007, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



Код

> pwd
/usr/home/larrikin/files/ncalc
> ll
total 14
-rw-r--r--  1 larrikin  wheel   118 Sep 21 23:31 Makefile
-rwxr-xr-x  1 larrikin  wheel   515 Sep 22 10:58 compile.sh
-rw-r--r--  1 larrikin  wheel    20 Sep 11 22:09 data
-rw-r--r--  1 larrikin  wheel  1721 Sep 21 22:39 getdata.c
-rw-r--r--  1 larrikin  wheel  2271 Sep 21 22:39 main.c
-rw-r--r--  1 larrikin  wheel   111 Sep 21 22:37 ncalc.h
> cat compile.sh
#!/usr/bin/make -f
SOURCES := $(wildcard *.c)
OBJECTS = $(SOURCES:.c=.o)
PROJNAME = $(notdir $(PWD))
BINARY= $(PROJNAME)
$(BINARY): $(OBJECTS)
        $(CC) $(LDFLAGS) -o $@ $(OBJECTS)

# а здеся мы генерим зависимости от заголовков
include $(SOURCES:.c=.d)

%.d: %.c
        gcc -MM -MG $< \
        | sed 's/\($*\)\.o[ :]*/\1.o $@ : /g' > $@; \
        [ -s $@ ] || rm -f $@
clean:
        rm -f *.d *.o

.PHONY: clean> ./compile.sh
"./compile.sh", line 10: Missing dependency operator
make: fatal errors encountered -- cannot continue
>



Это сообщение отредактировал(а) Larrikin - 22.9.2007, 10:51
PM MAIL WWW ICQ   Вверх
JackYF
Дата 22.9.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Попробуй вручную создать пустые файлы getdata.d, main.d или вместо


Цитата(Larrikin @  22.9.2007,  10:51 Найти цитируемый пост)
include $(SOURCES:.c=.d)

сделать
Цитата

-include $(SOURCES:.c=.d)



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Larrikin
Дата 22.9.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



оба способа не меняют ошибку в любой комбинации...

напоминаю

> uname -rs
FreeBSD 6.2-STABLE

PM MAIL WWW ICQ   Вверх
JackYF
Дата 22.9.2007, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Гм. Попробуй переименовать файл Makefile в что-нибудь другое.
Честно говоря, не понимаю ошибки.

Попробуй, если и это не пойдет, создать файл с названием Makefile и туда скопировать всё содержимое без первой строчки файла compile.sh, после чего вызвать
Цитата

make



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Larrikin
Дата 22.9.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



нашел в магазине книжку "В.П.Солдатов. Make. Build. Autotools. Управление программными проектами"
пофтыкаю, авось разберусь, раз это такой гимор...
PM MAIL WWW ICQ   Вверх
JackYF
Дата 22.9.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



Цитата(Larrikin @  22.9.2007,  19:56 Найти цитируемый пост)
пофтыкаю, авось разберусь, раз это такой гимор... 

не знаю. Простые make-файлы у меня заработали с пол-пинка... хотя читать там, действительно, есть о чём smile


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Larrikin
Дата 27.9.2007, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



вот так вроде работает:

Код

#!/usr/local/bin/gmake -f
SOURCES = $(wildcard *.c)
HEADERS = $(wildcard *.h)
OBJECTS = $(SOURCES:.c=.o)
PROJNAME = $(notdir $(PWD))
BINARY = $(PROJNAME)
CC = gcc

$(BINARY): $(OBJECTS)
        $(CC) $(LDFLAGS) -o $@ $(OBJECTS)

$(OBJECTS): $(SOURCES) $(HEADERS)
        $(CC) -c $(SOURCES) -I $(PWD)

clean:
        rm -f *.d *.o

.PHONY: clean


PM MAIL WWW ICQ   Вверх
Larrikin
Дата 27.9.2007, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



как такое может быть? я просто в шоке...

Код

        for ( i = 1; i <= n[0].id; ++i){
            printf("%i %li:%lf\n", i, n[i].id, n[i].value);
        }
// Гарантируем возврат хоть какого-нибудь результата
        if ( best.is_null ){
            fprintf(stderr, "first best: id %li value %ld\n", n[1].id, n[1].value);
            best.id1 = n[1].id;
            best.id2 = n[1].id;
            best.act = '+';
            best.result = n[1].value + n[1].value;
            best.err = fabs( n[0].value - best.result );
            best.is_null = false;
        }


выдает:
1 -1:5.000000
2 1:10.000000
3 2:25.000000
first best: id -1 value 0


ПОЧЕМУ НОЛЬ????
PM MAIL WWW ICQ   Вверх
Larrikin
Дата 28.9.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



а блин, просто формат вывода напутал %lf %ld
PM MAIL WWW ICQ   Вверх
Larrikin
Дата 28.9.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 15.8.2007

Репутация: нет
Всего: нет



а вот этого я реально не постигаю... сейчас такой ncalc.h

Код

#include <stdio.h>
#include <stdbool.h>
#include <tgmath.h>

// Сколько строк данных мы готовы переварить
// TODO: сделать опцией командной строки
#define MAX_DATALINE 100

// приходящие данные должны содержать целое и дробное число
struct dataline{
    long int id;
    long double value;
};

// общий массив для данных
struct dataline n[MAX_DATALINE + 1];

// в такой форме будем искать результат
struct new{
    long int id1;
    long int id2;
    char act;
    long double result;
    long double err;
    bool is_null;
};

// общая для лучшего предложения
struct new best;


в отдельном файле best_plus.c

Код

// Гарантируем возврат хоть какого-нибудь результата
        if ( best.is_null ){
            best.id1 = n[1].id;
            best.id2 = n[1].id;
            best.act = '+';
            printf("id(1) value(%lf)\n",n[1].value);
            best.result = (n[1].value + n[1].value);
            best.err = fabs( n[0].value - best.result );
            best.is_null = false;
        }
        printf("best: id1(%li) id2(%li) act(%c) result(%lf) err(%lf)\n",
            best.id1, best.id2, best.act, best.result, best.err);


Код

> cat data/nice
-1:5
-1:21
0:100
0:51
1:10
2:25
2 :15


выполняю ./lmake && ./ncalc < data/nice
 получаю фигню

id(1) value(5.000000)
best: id1(-1) id2(-1) act(+) result(-2.000000) err(0.000000)

каким образом пять плюс пять получается минус два и как с этим бороться? мыслей вообще никаких...
 smile 

Это сообщение отредактировал(а) Larrikin - 28.9.2007, 10:02
PM MAIL WWW ICQ   Вверх
Страницы: (4) Все 1 2 [3] 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.