try to create a makefile Makefile for one program eg simpleh

try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole).

Simple-hole.c

#include \"apue.h\"

#include <fcntl.h>

char buf1[] = \"abcdefghij\";

char buf2[] = \"ABCDEFGHIJ\";

int

main(void)

{

int fd;

if ((fd = creat(\"file.hole\", FILE_MODE)) < 0)

printf(\"creat error\");

if (write(fd, buf1, 10) != 10)

printf(\"buf1 write error\");

/* offset now = 10 */

if (lseek(fd, 16384, SEEK_SET) == -1)

printf(\"lseek error\");

/* offset now = 16384 */

if (write(fd, buf2, 10) != 10)

printf(\"buf2 write error\");

/* offset now = 16394 */

exit(0);

}

APUE.h

/*

* Our own header, to be included before all standard system headers.

*/

#ifndef _APUE_H

#define _APUE_H

#define _POSIX_C_SOURCE 200809L

#if defined(SOLARIS) /* Solaris 10 */

#define _XOPEN_SOURCE 600

#else

#define _XOPEN_SOURCE 700

#endif

#include <sys/types.h> /* some systems still require this */

#include <sys/stat.h>

#include <sys/termios.h> /* for winsize */

#if defined(MACOS) || !defined(TIOCGWINSZ)

#include <sys/ioctl.h>

#endif

#include <stdio.h> /* for convenience */

#include <stdlib.h> /* for convenience */

#include <stddef.h> /* for offsetof */

#include <string.h> /* for convenience */

#include <unistd.h> /* for convenience */

#include <signal.h> /* for SIG_ERR */

#define MAXLINE 4096 /* max line length */

/*

* Default file access permissions for new files.

*/

#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

/*

* Default permissions for new directories.

*/

#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)

typedef void Sigfunc(int); /* for signal handlers */

#define min(a,b) ((a) < (b) ? (a) : (b))

#define max(a,b) ((a) > (b) ? (a) : (b))

/*

* Prototypes for our own functions.

*/

char *path_alloc(size_t *); /* {Prog pathalloc} */

long open_max(void); /* {Prog openmax} */

int set_cloexec(int); /* {Prog setfd} */

void clr_fl(int, int);

void set_fl(int, int); /* {Prog setfl} */

void pr_exit(int); /* {Prog prexit} */

void pr_mask(const char *); /* {Prog prmask} */

Sigfunc *signal_intr(int, Sigfunc *); /* {Prog signal_intr_function} */

void daemonize(const char *); /* {Prog daemoninit} */

void sleep_us(unsigned int); /* {Ex sleepus} */

ssize_t readn(int, void *, size_t); /* {Prog readn_writen} */

ssize_t writen(int, const void *, size_t); /* {Prog readn_writen} */

int fd_pipe(int *); /* {Prog sock_fdpipe} */

int recv_fd(int, ssize_t (*func)(int,

const void *, size_t)); /* {Prog recvfd_sockets} */

int send_fd(int, int); /* {Prog sendfd_sockets} */

int send_err(int, int,

const char *); /* {Prog senderr} */

int serv_listen(const char *); /* {Prog servlisten_sockets} */

int serv_accept(int, uid_t *); /* {Prog servaccept_sockets} */

int cli_conn(const char *); /* {Prog cliconn_sockets} */

int buf_args(char *, int (*func)(int,

char **)); /* {Prog bufargs} */

int tty_cbreak(int); /* {Prog raw} */

int tty_raw(int); /* {Prog raw} */

int tty_reset(int); /* {Prog raw} */

void tty_atexit(void); /* {Prog raw} */

struct termios *tty_termios(void); /* {Prog raw} */

int ptym_open(char *, int); /* {Prog ptyopen} */

int ptys_open(char *); /* {Prog ptyopen} */

#ifdef TIOCGWINSZ

pid_t pty_fork(int *, char *, int, const struct termios *,

const struct winsize *); /* {Prog ptyfork} */

#endif

int lock_reg(int, int, int, off_t, int, off_t); /* {Prog lockreg} */

#define read_lock(fd, offset, whence, len) \\

lock_reg((fd), F_SETLK, F_RDLCK, (offset), (whence), (len))

#define readw_lock(fd, offset, whence, len) \\

lock_reg((fd), F_SETLKW, F_RDLCK, (offset), (whence), (len))

#define write_lock(fd, offset, whence, len) \\

lock_reg((fd), F_SETLK, F_WRLCK, (offset), (whence), (len))

#define writew_lock(fd, offset, whence, len) \\

lock_reg((fd), F_SETLKW, F_WRLCK, (offset), (whence), (len))

#define un_lock(fd, offset, whence, len) \\

lock_reg((fd), F_SETLK, F_UNLCK, (offset), (whence), (len))

pid_t lock_test(int, int, off_t, int, off_t); /* {Prog locktest} */

#define is_read_lockable(fd, offset, whence, len) \\

(lock_test((fd), F_RDLCK, (offset), (whence), (len)) == 0)

#define is_write_lockable(fd, offset, whence, len) \\

(lock_test((fd), F_WRLCK, (offset), (whence), (len)) == 0)

void err_msg(const char *, ...); /* {App misc_source} */

void err_dump(const char *, ...) __attribute__((noreturn));

void err_quit(const char *, ...) __attribute__((noreturn));

void err_cont(int, const char *, ...);

void err_exit(int, const char *, ...) __attribute__((noreturn));

void err_ret(const char *, ...);

void err_sys(const char *, ...) __attribute__((noreturn));

void log_msg(const char *, ...); /* {App misc_source} */

void log_open(const char *, int, int);

void log_quit(const char *, ...) __attribute__((noreturn));

void log_ret(const char *, ...);

void log_sys(const char *, ...) __attribute__((noreturn));

void log_exit(int, const char *, ...) __attribute__((noreturn));

void TELL_WAIT(void); /* parent/child from {Sec race_conditions} */

void TELL_PARENT(pid_t);

void TELL_CHILD(pid_t);

void WAIT_PARENT(void);

void WAIT_CHILD(void);

#endif /* _APUE_H */

Solution

-----------------------------------------------------------------------------------------------

Explaination:

The -I. is included so that gcc will look in the current directory (.) for the include file apue.h.

the macro DEPS, which is the set of .h files on which the .c files depend. Then we define a rule that applies to all files ending in the .o suffix. The rule says that the .o file depends upon the .c version of the file and the .h files included in the DEPS macro. The rule then says that to generate the .o file, make needs to compile the .c file using the compiler defined in the CC macro. The -c flag says to generate the object file, the -o $@ says to put the output of the compilation in the file named on the left side of the : (colon), the $< is the first item in the dependencies list, and the CFLAGS macro is defined as above.

special macros $@ and $^, which are the left and right sides of the : (colon),

all of the include files should be listed as part of the macro DEPS, and all of the object files should be listed as part of the macro OBJ.

You can use names of files instead of macros ,if macros are confusing for you...

try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole). Simple-hole.c #include \
try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole). Simple-hole.c #include \
try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole). Simple-hole.c #include \
try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole). Simple-hole.c #include \
try to create a makefile (Makefile) for one program (e.g., simple-hole.c with apue.h) to compile and make an execuatable (simple-hole). Simple-hole.c #include \

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site