這是一個通常的做法編譯與調試符號,然後使用objcopy
的二進制分成釋放可執行文件,並與調試信息的文件(然後換行到單獨的包或存儲符號服務器上)。CMake的保存剝離調試信息
如何調試符號在適當的CMake分開?我只看過一些討論和不完整的代碼示例。
平臺是Linux和GCC。
這是一個通常的做法編譯與調試符號,然後使用objcopy
的二進制分成釋放可執行文件,並與調試信息的文件(然後換行到單獨的包或存儲符號服務器上)。CMake的保存剝離調試信息
如何調試符號在適當的CMake分開?我只看過一些討論和不完整的代碼示例。
平臺是Linux和GCC。
CMake的不具有這種直接的支持,但你可以使用一些POST_BUILD和INSTALL步驟來實現你想要的結果。但是,值得注意的是,使用objcopy
並不是做這種事情的唯一方法。你也可以使用build-id,這可能更容易用CMake來強大的實現。
這裏有一個pretty good description of your choices and the methods,在幾年前由Michael Hertling發佈到CMake郵件列表中。我只是在這裏挑選出可供選擇的參考文獻,但我建議閱讀該鏈接。 GDB文檔中還有更多的complete discussion of the two alternatives,這些文檔應該填寫關於這兩種方法的剩餘空白(調試鏈接與build-id)。下面是邁克爾的常規構建-ID的方法(集結號在他的例子明確給出,閱讀引用的文章爲它有望代表的解釋):
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
PROJECT(BUILDID C)
SET(CMAKE_VERBOSE_MAKEFILE ON)
SET(BUILDID "abcdef1234")
STRING(SUBSTRING "${BUILDID}" 0 2 BUILDIDPREFIX)
STRING(SUBSTRING "${BUILDID}" 2 8 BUILDIDSUFFIX)
FILE(WRITE ${CMAKE_BINARY_DIR}/main.c "int main(void){return 0;}\n")
ADD_EXECUTABLE(main main.c)
SET_TARGET_PROPERTIES(main PROPERTIES
LINK_FLAGS "-Wl,--build-id=0x${BUILDID}")
ADD_CUSTOM_COMMAND(TARGET main POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:main>
${CMAKE_BINARY_DIR}/main.debug
COMMAND ${CMAKE_STRIP} -g $<TARGET_FILE:main>)
INSTALL(FILES ${CMAKE_BINARY_DIR}/main.debug
DESTINATION ${CMAKE_BINARY_DIR}/.build-id/${BUILDIDPREFIX}
RENAME ${BUILDIDSUFFIX}.debug)
配置與CMAKE_BUILD_TYPE ==調試並建立;隨後,調用
GDB -EX「設置調試文件的目錄。」 -ex「文件主」
從CMAKE_BINARY_DIR中,您將按預期閱讀「找不到調試符號 」。現在,發出 「讓安裝」,再調用GDB,念道: 「從... /讀取符號構建-ID/AB/cdef1234.debug」
正如你所看到的,調試信息文件與剝離 可執行由構建ID僅連接;沒有objcopy視線。
以上使用的事實是.debug
文件預計是一個正常的可執行文件,調試信息不會被剝離。