我的项目有一个清空终端的功能,是使用curses库实现的。使用 -lcurses
标志编译工作正常,但编译时没有 yields
/tmp/cc3T2MVI.o: In function `ClearScreen()':
clear_term.cpp:(.text+0xb): undefined reference to `cur_term'
clear_term.cpp:(.text+0x26): undefined reference to `setupterm'
clear_term.cpp:(.text+0x37): undefined reference to `tigetstr'
clear_term.cpp:(.text+0x3f): undefined reference to `putp'
collect2: ld returned 1 exit status
这显然是预期的,因为它找不到库,但由于此功能是补充功能,因此最好将 ClearScreen()
定义为空函数,而不是让编译失败。我知道我将函数定义放在 #ifdef
block 中,但我不知道 curses 定义的任何标志。
是否可以捕获这些错误并将 ClearScreen()
定义为空函数?
最佳答案
您可以在 Makefile 中定义一个宏:
use_curses=1
FLAGS+=-DUSING_MAKEFILE
ifeq ($(use_curses),0)
FLAGS+=-DNO_NCURSES
else
LIBS+=-lcurses
endif
在代码中:
#ifndef USING_MAKEFILE
# error "Please use provided Makefile to compile!"
#endif
#ifdef NO_CURSES
void ClearScreen() { }
#endif
关于c++ - 你能处理 C++ 中的编译时错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9487585/