我正在编写一个 make 文件来运行它:
gcc program_1.c -lgsl -lgslcblas -o program_1
./program_1
这是我的 makefile
CC=gcc
CFLAGS=-c -Wall
LDFLAGS=-g
LIBS= -lgsl -lgslblas
SOURCES=program_1.c
OBJECTS=$(SOURCES:.c=.o)
EXECUTABLE=program_1
all: $(SOURCES) $(EXECUTABLE)
./$(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) $(LIBS) -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
但是,我在运行 make 时遇到此错误:
make: Nothing to be done for `all'.
我阅读了有关 makefile 和 man make 页面的各种教程,但我仍然陷入困境。如果您有任何解决此问题的建议,请告诉我。谢谢!
编辑: 根据乔纳森·莱夫勒的建议
gcc -I/usr/include/gsl program_1.c -o program_1.o
/tmp/ccLJo81U.o: In function `main':
program_1.c:(.text+0xb1): undefined reference to `gsl_matrix_view_array'
program_1.c:(.text+0xce): undefined reference to `gsl_matrix_view_array'
program_1.c:(.text+0xd8): undefined reference to `gsl_permutation_alloc'
program_1.c:(.text+0x128): undefined reference to `gsl_matrix_get'
program_1.c:(.text+0x1b6): undefined reference to `gsl_linalg_LU_decomp'
program_1:(.text+0x1d6): undefined reference to `gsl_linalg_LU_invert'
program_1.c:(.text+0x21f): undefined reference to `gsl_matrix_get'
program_1.c:(.text+0x29c): undefined reference to `gsl_permutation_free'
collect2: error: ld returned 1 exit status
make: *** [program_1.o] Error 1
据我所知,只有当我使用make时,它才无法识别我在program_1.c中使用的GNU GSL库。您以前遇到过类似的问题吗?
最佳答案
如果您已正确编写代码,请使用 #include <gsl/gsl_XXXXX.h>
等符号包含 GSL header (如 GSL — GNU Scientific Library — 文档中 example program 中所述),那么您不需要 -I /usr/include/gsl
选项 — 除非您已隐藏 /usr/include/gsl/gsl
中的 GSL header 目录,这似乎有点不太可能。
你的 makefile 应该大约是:
CC = gcc
CFLAGS = -g -Wall
LDFLAGS =
LDLIBS = -lgsl -lgslcblas
SOURCES = program_1.c
OBJECTS = $(SOURCES:.c=.o)
PROGRAM = program_1
all: $(SOURCES) $(PROGRAM)
./$(PROGRAM)
$(PROGRAM): $(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $@
这与您所得到的非常接近。我已重命名EXECUTABLE
至PROGRAM
这样主要名称的长度就相同(愚蠢,但是……)。我删除了.c.o
规则自 make
已经知道如何将 C 代码编译为目标文件并使用类似于您所显示的规则 - 内置规则包括显式 -c
标志,您目前缺少该标志。
链接行包括 CFLAGS,CFLAGS 包括 -g
在构建中包含调试信息的选项。
您已经在目标文件之后包含了库;这是重要且正确的。
库名称已更新为 -lgslcblas
匹配评论。
关于c - 使: Nothing to be done for `all' error for make file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31889424/