编译ncurses代码与GCC -lncurses标志似乎不工作
compiling ncurses code with gcc -lncurses flag seems to not be working
我正在使用护士编写一个基于终端的俄罗斯方块游戏。我将所有的护士代码分离到一个名为tetrisUI.c的文件中,并在main.c源文件中包含了一个头文件。当我编译所有的ncurses函数时,会引发编译器错误。我在源文件中包含了ncurses.h,并且在gcc中使用了-lncurses标志。我从一个包含以下内容的makefile编译:
Tetris : tetris.o main.o tetrisUI.o
gcc tetris.o main.o tetrisUI.o -o Tetris
tetrisUI.o : tetrisUI.c
gcc -std=c99 -c tetrisUI.c -lncurses
tetris.o : tetris.c tetris.h
gcc -std=c99 -c tetris.c
main.o : main.c tetris.h tetrisUI.h
gcc -std=c99 -c main.c
我能够使用护士编译一些简短的测试程序。这是我第一次尝试使用护士,也是我第一个重要的c程序(我在学校学过一点c++)。我有一种预感,我的问题与我的makefile有关,但我也不擅长使用这些。
在链接阶段而不是编译阶段使用-lncurses
:
gcc tetris.o main.o tetrisUI.o -o Tetris -lncurses
你可以通过使用默认的宏和规则来简化你的Makefile:
CFLAGS = -std=c99 # C compiler flags
LDLIBS = -lcurses # curses
Tetris : tetris.o main.o tetrisUI.o # make does a "$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)" on its own
这就是你所需要的。下面的定义和规则可以完全省略——make在默认情况下做正确的事情:
CC = gcc # C compiler name
tetrisUI.o : tetrisUI.c tetrisUI.h # make does a "$(CC) $(CFLAGS) -o $@ $<" on its own
tetris.o : tetris.c tetris.h
main.o : main.c tetris.h tetrisUI.h
一点解释:$@
是正在构建的任何东西,$<
是第一个依赖项,$^
是所有这些。明智地使用它可以减少输入(以及减少愚蠢的错误,即添加依赖项而不处理它;或者省略一个依赖项(这样,如果它发生了变化,就不必重做构建)。看一下make手册,如果你有GNU make,它的信息文件有很多详细的例子和技巧。
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- 使用 std::atomic 标志和 std::condition_variable 在工作线程上等待
- 为什么我必须将错误状态标志设置为 goodbit 才能使其工作
- 为什么一些 GCC 警告标志不属于C++语言,但在C++中工作
- I/O流标志是如何工作的
- Android OpenCV imread 标志致命异常,imread 在没有标志的情况下工作正常,像素输出与 MATLAB 不匹配
- make OBJECT文件标志不工作
- 调用WinHttpCreateUrl与ICU_REJECT_USERPWD标志设置在Windows 7中工作,但不Win
- g++内联asm在使用优化标志时未按预期工作
- 打开CV标志不工作
- 编译ncurses代码与GCC -lncurses标志似乎不工作