Through lcthw ex13 plus some make rework

This commit is contained in:
Dan Buch 2024-04-19 08:14:39 -04:00
parent ea9cb1f846
commit 5381d5f0ce
Signed by: meatballhat
GPG Key ID: A12F782281063434
5 changed files with 44 additions and 5 deletions

3
lcthw/.ex10.argv Normal file
View File

@ -0,0 +1,3 @@
carrot
angelfood
yellow

5
lcthw/.ex13.argv Normal file
View File

@ -0,0 +1,5 @@
garble
geckle
gimple
gorble
gunkle

1
lcthw/.gitignore vendored
View File

@ -6,3 +6,4 @@ ex9
ex10 ex10
ex11 ex11
ex12 ex12
ex13

View File

@ -1,11 +1,14 @@
CFLAGS ?= -Wall -g CFLAGS ?= -Wall -g
GDBRUN = gdb --batch --ex run --ex bt --ex q --args GDBRUN = gdb --batch --ex run --ex bt --ex q --args
BUILD_TARGETS = ex1 ex3 ex7 ex8 ex9 ex10 ex11 ex12 BUILD_TARGETS = $(foreach ex,$(wildcard ex*.c),$(subst .c,,$(ex)))
TEST_TARGETS = ex1 ex3 ex7 ex8 ex9 ex11 ex12
.PHONY: all .PHONY: all
all: build test all: build test
.PHONY: echo
echo:
@echo BUILD_TARGETS=$(BUILD_TARGETS)
.PHONY: clean .PHONY: clean
clean: clean:
rm -f $(BUILD_TARGETS) rm -f $(BUILD_TARGETS)
@ -15,16 +18,18 @@ build: $(BUILD_TARGETS)
.PHONY: gtest .PHONY: gtest
gtest: gtest:
@$(foreach bt, $(TEST_TARGETS), make .gtest.$(bt) &&) \ @$(foreach bt, $(BUILD_TARGETS), make .gtest.$(bt) &&) \
printf '\ngYAY\n' printf '\ngYAY\n'
.gtest.%: .gtest.%:
@test_argv=$$(cat .$*.argv 2>/dev/null || echo) && \
printf '\n==> %s\n' "$*" && $(GDBRUN) ./$* printf '\n==> %s\n' "$*" && $(GDBRUN) ./$*
.PHONY: test .PHONY: test
test: test:
@$(foreach bt, $(TEST_TARGETS), make .test.$(bt) &&) \ @$(foreach bt, $(BUILD_TARGETS), make .test.$(bt) &&) \
printf '\nYAY\n' printf '\nYAY\n'
.test.%: .test.%:
printf '\n==> %s\n' "$*" && ./$* @test_argv=$$(cat .$*.argv 2>/dev/null || echo) && \
printf '\n==> %s\n' "$*" && ./$* $$test_argv

25
lcthw/ex13.c Normal file
View File

@ -0,0 +1,25 @@
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
// go through each string in argv
// why am I skipping argv[0]?
for (i = 1; i < argc; i++) {
printf("arg %d: %s\n", i, argv[i]);
}
// let's make our own array of strings
char *states[] = {
"California", "Oregon",
"Washington", "Texas",
};
int num_states = 4;
for (i = 0; i < num_states; i++) {
printf("state %d: %s\n", i, states[i]);
}
return 0;
}