all: 01-blocking_input 02-blocking_input_test 03-buffered_output_test 04-blocking_pipe 05-blocking_pipe_multiprocessing-01 06-blocking_pipe_multiprocessing-02 07-blocking_pipe_multiprocessing-03 08-blocking_pipe_multithreading-01 09-nonblocking_pipe-01 10-nonblocking_pipe-02 11-blocking_pipe_select

01-blocking_input: 01-blocking_input.c
	gcc -Wall -o 01-blocking_input 01-blocking_input.c

02-blocking_input_test: 02-blocking_input_test.c
	gcc -Wall -o 02-blocking_input_test 02-blocking_input_test.c

03-buffered_output_test: 03-buffered_output_test.c
	gcc -Wall -o 03-buffered_output_test 03-buffered_output_test.c

04-blocking_pipe: 04-blocking_pipe.c
	gcc -Wall -o 04-blocking_pipe 04-blocking_pipe.c

05-blocking_pipe_multiprocessing-01: 05-blocking_pipe_multiprocessing-01.c
	gcc -Wall -o 05-blocking_pipe_multiprocessing-01 05-blocking_pipe_multiprocessing-01.c

06-blocking_pipe_multiprocessing-02: 06-blocking_pipe_multiprocessing-02.c
	gcc -Wall -o 06-blocking_pipe_multiprocessing-02 06-blocking_pipe_multiprocessing-02.c

07-blocking_pipe_multiprocessing-03: 07-blocking_pipe_multiprocessing-03.c
	gcc -Wall -o 07-blocking_pipe_multiprocessing-03 07-blocking_pipe_multiprocessing-03.c

08-blocking_pipe_multithreading-01: 08-blocking_pipe_multithreading-01.c
	gcc -Wall -D_REENTRANT -lpthread -o 08-blocking_pipe_multithreading-01 08-blocking_pipe_multithreading-01.c

09-nonblocking_pipe-01: 09-nonblocking_pipe-01.c
	gcc -Wall -o 09-nonblocking_pipe-01 09-nonblocking_pipe-01.c

10-nonblocking_pipe-02: 10-nonblocking_pipe-02.c
	gcc -Wall -o 10-nonblocking_pipe-02 10-nonblocking_pipe-02.c

11-blocking_pipe_select: 11-blocking_pipe_select.c
	gcc -Wall -o 11-blocking_pipe_select 11-blocking_pipe_select.c

clean_all:
	rm -f 01-blocking_input 02-blocking_input_test 03-buffered_output_test 04-blocking_pipe 05-blocking_pipe_multiprocessing-01 06-blocking_pipe_multiprocessing-02 07-blocking_pipe_multiprocessing-03 08-blocking_pipe_multithreading-01 09-nonblocking_pipe-01 10-nonblocking_pipe-02 11-blocking_pipe_select
