Link 到不同子目录的库目标

Link to library target from different subdirectory

我有以下设置:

在文件夹中 lib:

lib.h

#ifndef LIB_H_
#define LIB_H_

int fun(int i);

#endif

lib.c

#include "lib.h"

int fun(int i) {
  return i;
}

CMakeLists.txt

add_library(lib SHARED lib.c)

目录中 src:

main.c

#include "lib.h"
int main () {
  return fun(0);
}

CMakeLists.txt

add_executable(main main.c)
target_link_libraries(lib)

最后在它们共同的父目录中:

CMakeLists.txt

include_directories(lib)
add_subdirectory(lib)
add_subdirectory(src)

当我尝试使用

构建我的项目时
cmake
make

我收到以下链接器错误:

CMakeFiles/main.dir/main.o: In function `main':
main.c:(.text+0xa): undefined reference to `fun'

我做错了什么?

您在调用 target_link_libraries 时忘记了 target 参数,它应该是:

target_link_libraries(main lib)