2013-07-17 10 views
2

我在想如何讓CMake在連接器無法找到源文件中引用的符號時產生錯誤或至少發出警告?獲取CMake提供有關未引用符號的錯誤/警告

例如,假設我有foo.c的:

#include "bar.h" //bar.h provides bar() 

void foo(void) 
{ 
    bar() 
    return; 
} 

在此我建立一個靜態庫的情況下,如果我不是聰明我如何用我的add_library()指令後,默認行爲似乎甚至沒有給出警告,bar是foo的對象存檔文件(.a)中未引用的符號

+5

這就是鏈接器的工作 - CMake不是用來解析C或C++的,所以它無法可靠地幫助解決這個問題。 – Fraser

+0

你是對的!我做了更多的研究,我同意。 – bkinman

回答

0

最近有GCC鏈接器的-z now,但是,這不是CMake的問題。

我發現的最傻瓜的方式只適用於共享庫,但是你所做的基本上是爲每個共享庫編寫一個測試,然後它只對dlopen(path, RTLD_NOW)(以及類似的Windows)進行測試,然後使用它的返回值值作爲測試返回值。爲了得到所有共享對象的列表,我有一個圍繞add_library的包裝函數,它將所有共享庫添加到全局屬性中,然後用於動態生成測試。我記得有一些方法可以說明目標是共享的還是靜態的,但是我現在沒有發現它是文檔。

0

構建共享庫的MAKE_SHARED_LINKER_FLAGS編譯器標誌應該讓編譯器執行您想要的操作。在Unix系統上,這會使鏈接器報告任何來自目標文件的未解析的符號(當你在CMake項目中編譯多個目標時,這是非常典型的,但是,不要打擾以正確的順序鏈接目標依賴關係)。 來源:http://www.cmake.org/Wiki/CMake_Useful_Variables

相關問題