dlinyj: (Default)
[personal profile] dlinyj
Блин, есть у меня беда. Вот есть идея, горишь, горишь ей. Можно пол года гореть. А потом вдруг бац, депресняк, и уже ничего не хочется. Так же и с вафлярадио. Горел, делал, паял, ночами не спал и вдруг стало не интересно.



Это просто форменное безобразие. Обязуюсь написать хотя бы статью про работу с этими кошерными дисплеями.

Ребят, вопрос по си и мейкфайлам.

Как сделать так, чтобы был единый сишник, в нём были бы макроопределения, с уловной компиляцией кода, а на выходе было два (или более) разных бинарника, с условной компиляцией?

У меня просто тестовый софт, который в сущности отличается только адресами, а логика работы остаётся той же. Чтобы не плодить миллион программ, как это сделать?

Date: 2014-06-24 01:11 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
> Как сделать так, чтобы был единый сишник, в нём были бы макроопределения, с уловной компиляцией кода, а на выходе было два (или более) разных бинарника, с условной компиляцией?

Да хоть 10! Пиши нужное количество целей и компиляй себе. Вот тебе пример:

Файл 1.c:
#include <stdio.h>

int main(int c, char **v){
	printf("Value of macro: %d\n", TESTVAR);
	return 0;
}


Makefile:
SRC = 1.c
CC = gcc
DEFINES = -D_XOPEN_SOURCE=501
CXX = gcc
CFLAGS = -Wall -Werror $(DEFINES)
all : test1 test2
test1 : $(SRC)
	$(CC) $(CFLAGS) $(SRC) -DTESTVAR=0 -o test1

test2 : $(SRC)
	$(CC) $(CFLAGS) $(SRC) -DTESTVAR=1 -o test2

clean:
	/bin/rm -f *.o *~


Компиляем и запускаем:
make
gcc -Wall -Werror -D_XOPEN_SOURCE=501 1.c -DTESTVAR=0 -o test1
gcc -Wall -Werror -D_XOPEN_SOURCE=501 1.c -DTESTVAR=1 -o test2

./test1
Value of macro: 0

./test2
Value of macro: 1


P.S. А забиванием и сам страдаю: мелкой уже четвертый месяц никак "чудо-барабан" не сделаю (все компоненты уже есть, надо только собрать и запрограммировать микроконтроллер).
Edited Date: 2014-06-24 01:13 pm (UTC)

Date: 2014-06-24 01:27 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Спасибо!

Date: 2014-06-24 01:19 pm (UTC)
From: [identity profile] sitlar.livejournal.com
Вроде все достаточно просто:
$cat Makefile
...
release: main.c
$(CC) $(CFLAGS) main.c
...
debug:
$(CC) $(CFLAGS) -DDEBUG main.c
...
$grep -A 3 DEBUG main.c
#ifdef DEBUG
fprintf(stderr, "Debug: %s", strdbg );
#elseif
...
$make debug

Date: 2014-06-24 01:27 pm (UTC)
From: [identity profile] dlinyj.livejournal.com
Большое спасибо!

Date: 2014-06-25 11:08 am (UTC)
From: [identity profile] r-a-d.livejournal.com
У меня другая проблема - сосредоточиться на задаче. Много отвлекающих факторов в доме.
Но после того как сосредоточусь, выхожу на финальное устройство в течении пары дней. Максимум в неделю.

Date: 2014-07-01 09:38 pm (UTC)
From: [identity profile] belbes.livejournal.com
А почему не используешь cmake?

Date: 2014-07-02 06:14 am (UTC)
From: [identity profile] dlinyj.livejournal.com
Не знаю, не умею

January 2026

S M T W T F S
    123
456 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 11:23 am
Powered by Dreamwidth Studios