1. 程式人生 > >C/C++下__FILE__參數過長的問題解決辦法

C/C++下__FILE__參數過長的問題解決辦法

txt oot 同時 語言 makefile 問題: ash line filename

編譯usrsctp庫時,爆出一個編譯問題:

snprintf(msg, sizeof(msg), "OOTB, %s:%d at %s", __FILE__, __LINE__, __func__);

這兒報告msg的空間不足以存放後續的內容,

此字符串在實際編譯後,存放的內容大小是固定的,但由於__FILE__帶了全路徑,導致報告空間不夠。

搜索一通後解決辦法如下:

如果是使用CMAKE編譯的,在CMakeLists.txt中添加這麽一行(C++語言需要將CMAKE_C_FLAGS換成CMAKE_CXX_FLAGS)

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D__FILENAME__=‘\"$(subst ${CMAKE_SOURCE_DIR}/usrsctplib/netinet/,,$(abspath $<))\"‘")

如果使用的是GNU Makefile,則應該在相應的Makefile中添加如下行(C++語言需要將C_FLAGS換成CXX_FLAGS)

C_FLAGS+=-D__FILENAME__=‘\"$(subst $(SOURCE_PREFIX)/,,$(abspath $<))\"‘

同時源代碼中,所有使用__FILE__的,替換成__FILENAME__宏。

C/C++下__FILE__參數過長的問題解決辦法