0

これは私の C プロジェクトです。これはまさに単純な Linux シェルです。このプログラムを Linux で実行します。このプログラムの makefile が必要です。単純な makefile が必要です。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <signal.h>
#include <sys/types.h>
#define BUFFER_SIZE 1<<16
#define ARR_SIZE 1<<16
void sig_had(int signo)
{
    puts ("This is my signal handling ..!");

}
void parse_args(char *buffer, char** args, 
                size_t args_size)
{
    char *buf_args[args_size]; 
    char **cp;
    char *wbuf;
    size_t i, j;

    wbuf=buffer;
    buf_args[0]=buffer; 
    args[0] =buffer;

    for(cp=buf_args; (*cp=strsep(&wbuf, " \n\t")) != NULL ;){
        if ((*cp != NULL) && (++cp >= &buf_args[args_size]))
            break;
    }

    for (j=i=0; buf_args[i]!=NULL; i++){
        if(strlen(buf_args[i])>0)
            args[j++]=buf_args[i];
    }
}

int main(int argc, char *argv[], char *envp[]){
    char buffer[BUFFER_SIZE];
    char *args[ARR_SIZE];

    int status;
    size_t nargs;
    pid_t child_pid;
    signal(SIGCHLD,sig_had);
    while(1){
        printf("COMMAND ");
        fgets(buffer,BUFFER_SIZE,stdin);
        parse_args(buffer, args, ARR_SIZE); 

            child_pid = fork();
        if (child_pid){

            child_pid = wait(status);

        } else {
            execvp(args[0], args);


        }
    }    
    return 0;
}
4

3 に答える 3

5

そのための Makefile はまったく必要ありません。ソースファイルが として保存されていると仮定してfoo.c、実行するだけです

make foo

デフォルトの Makefile が開始され、実行されます。

cc foo.c -o foo
于 2012-12-14T13:57:38.780 に答える
4

わかりました...これのmakefileを生成したい場合は、次のように入力します。

all: yourfilename.c
    gcc yourfilename.c -o yourexename

「Makefile」(拡張子なし)という名前のファイルに、ファイルと同じ場所に配置します.c。次にmake、そのディレクトリで実行します。

注 1: Makefile では空白が重要です。ビルドするコマンドはgcc ...1<tab>インデントする必要があります。

注 2:これは単なる例です。独自のフラグを使用してビルド コマンドを変更できます (すべきです)。-Wall入れると良いでしょう。

注 3: Makefile は大きなトピックです。それらについてよく読んでください: http://www.gnu.org/software/make/manual/

于 2012-12-14T13:54:21.803 に答える
2

make以前に構成された設定がないと仮定すると、

# gcc to compile source files.
CC = gcc
# linker is also "gcc". may be something else with other compilers.
LD = gcc
# Compiler flags go here.
CFLAGS = -g -Wall
# Linker flags go here. 
LDFLAGS =
# list of generated object files.
OBJS = hello.o
# program executable file name.
EXEC = exec

all: $(EXEC)

# rule to link the program
$(EXEC): $(OBJS)
      $(LD) $(LDFLAGS) $(OBJS) -o $(EXEC)

hello.o: hello.c 
    $(CC) $(CFLAGS) -c hello.c

1 つの実行可能バイナリを作成する .c ファイルしかない限り、それ以上は必要ありません。

于 2012-12-14T14:18:06.250 に答える