让CMake给出关于未引用符号的错误/警告

时间:2013-07-17 18:06:25

标签: cmake

我想知道当链接器找不到源文件中引用的符号时,我会如何让CMake产生错误,或者至少是警告?

例如,假设我有foo.c:

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

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

如果我正在构建一个静态库,如果我不知道我如何使用我的add_library()指令,那么默认行为似乎甚至不会发出警告:bar是foo中的一个未引用的符号对象存档文件(.a)

2 个答案:

答案 0 :(得分:1)

用于构建共享库的MAKE_SHARED_LINKER_FLAGS编译器标志应该让编译器执行您想要的操作。

设置(CMAKE_SHARED_LINKER_FLAGS“-Wl, - no-undefined”) 在Unix系统上,这将使链接器报告来自目标文件的任何未解析的符号(这在CMake项目中编译许多目标时非常典型,但不要以正确的顺序链接目标依赖项)。 资料来源:http://www.cmake.org/Wiki/CMake_Useful_Variables

答案 1 :(得分:0)

这些天GCC链接器有-z now,但是,这不是CMake的问题。

我发现的最简单的方法只适用于共享库,但你所做的基本上是为每个共享库编写一个测试,然后只做dlopen(path, RTLD_NOW)(和Windows类似)然后使用其返回值作为测试返回值。为了获得所有共享对象的列表,我有一个围绕add_library的包装函数,它将所有共享库添加到全局属性,然后用于动态生成测试。我记得有一些方法可以判断目标是共享的还是静态的,但我现在还没有找到它的文档。