2014-11-23 79 views
1

編譯一個可運行的Hello World我試圖編譯一個簡單的Hello World程序:GCC不能在Cygwin的

#include <stdio.h> 

int main() 
{ 
    printf("Hello World!"); 
    return 0; 
} 

有了這個Makefile:

TARGET = main.exe 
OBJECT_01 = main.o 
SOURCE_01 = main.c 

$(TARGET): $(OBJECT_01) 
    gcc -g -o $(TARGET) $(OBJECT_01) -lstdc++ 

$(OBJECT_01) : $(SOURCE_01) 
    gcc -g -c $(SOURCE_01) -o $(OBJECT_01) 

all : $(TARGET) 

clean : 
    -rm $(TARGET) $(OBJS) 

並將其編譯爲主力。 EXE很好,但是當我嘗試運行./main.exe它說,該文件不存在,並刪除它。

我是否缺少一些cygwin軟件包或其他東西?

UPD:下面是完整的終端命令序列:

[email protected] ~/gcc-test 
$ ls 
main.c main.exe main.o makefile 

[email protected] ~/gcc-test 
$ make clean 
rm main.exe 

[email protected] ~/gcc-test 
$ make 
gcc -g -o main.exe main.o 

[email protected] ~/gcc-test 
$ ls 
main.c main.exe main.o makefile 

[email protected] ~/gcc-test 
$ ./main.exe 
-bash: ./main.exe: No such file or directory 

[email protected] ~/gcc-test 
$ ls 
main.c main.o makefile 
+1

如果它是一個C程序,爲什麼要將它與C++庫鏈接? – 2014-11-23 13:54:33

+0

你的makefile看起來很好,不知道爲什麼你用'-lstdC++'鏈接。 gcc會自動爲C程序鏈接C庫。你可能會刪除'-lstdC++'。編譯後,它確實生成'main.exec'吧? – 2014-11-23 13:54:57

+0

@BlueMoon當-lstdC++被刪除時,會發生完全相同的事情。 – 2014-11-23 14:29:26

回答

0

不是一個直接的答案,但希望有趣和有用的你:你Makefile是過於複雜。 以下Makefile將完美地完成這項工作對您:

CFLAGS+=-g 

.PHONY: all 
all: main 

.PHONY: clean 
clean: 
     $(RM) main.o main 

(大多數Makefile教程是壞的,我還沒有看到一個很好的,但 - 抱歉,我不得不說,像這樣的咆哮,但我真的相信這是重要的和真實的。)

+0

不僅不是一個直接的答案,而是根本問不答。 – hvd 2014-11-23 15:08:14