CMAKE链接到系统库

Car*_*s00 4 c c++ cmake

我们想用CMAKE系统构建一个共享库.它是这样的:

lib/
  CMakeLists.txt
  src/
    CMakeLists.txt
    module/
      CMakeLists.txt
      module1.c
    foo.c
Run Code Online (Sandbox Code Playgroud)

module1.c需要一些标准的共享库librt.我们有

add_library(module module1.c)
target_link_libraries(module rt)
Run Code Online (Sandbox Code Playgroud)

module/子目录中.但仍然得到错误的东西librt是未知的.

Mac*_*iej 7

如果librt与-lrt链接,那么在CMake中你可以用这种方式链接它:

target_link_libraries(module -lrt)
Run Code Online (Sandbox Code Playgroud)

  • 根据http://voices.canonical.com/jussi.pakkanen/2013/03/26/a-list-of-common-cmake-antipatterns/不是一个好主意 (3认同)

Rus*_*hPL 6

实际上你正在做的事情应该有效。如果编译器找不到该库,它可能根本不在标准库路径中。您可以使用以下帮助来指定不同的link_directories-L/some/path编译器参数)。

cmake --help-command link_directories
Run Code Online (Sandbox Code Playgroud)

在调试 CMake 构建时可以做的另一件有用的事情是打印出运行编译器的命令:

make VERBOSE=1
Run Code Online (Sandbox Code Playgroud)

然后,您可以接受命令并手动调整它们以使其工作。之后就是修改的问题了CMAKE_C_FLAGS//include_directorieslink_directories