C/C++下__FILE__參數過長的問題解決辦法
阿新 • • 發佈:2019-01-16
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__參數過長的問題解決辦法