CMake target_link_libraries 转换导致链接器 "not found" 错误的路径

CMake target_link_libraries converting path which results in linker "not found" error

我正在使用 CMake 为外部应用程序构建模块。作为构建的一部分,我还生成了一个可执行文件,该可执行文件将模块链接到 运行 测试。但是,作为外部应用程序模块约定的一部分,模块名称不应具有 lib 前缀。这导致以下 CMakeLists.txt:

add_library(mymodule SHARED mymodule.c)
set_target_properties(mymodule PROPERTIES PREFIX "")

add_executable(mytest mytest.c)
target_link_libraries(mytest ${CMAKE_BINARY_DIR}/mymodule.so)

构建时,CMake 将路径转换为搜索名称,导致错误:

/usr/bin/ld: cannot find -lmymodule

如果我 运行 cmake . 在构建 mymodule.so 后再次 cmake . (不改变任何东西),它将从使用 -lmymodule 切换到 [=17= 的实际路径],它起作用了。如果我删除 PROPERTIES PREFIX "",它也有效。

由于我在 target_link_libraries() 中指定了 mymodule.so 路径,我怎样才能让 CMake 停止将其转换为搜索名称 (-lmymodule)?

您应该 link 针对目标,而不是文件(如果这些目标是您项目的一部分)。在您的情况下,它将是 target_link_libraries(mytest mymodule).

但是如果出于某种原因需要 link 反对完整路径,CMake 有一些特性,这些特性在 docs. So in your case it converts the full path to -lmymodule because it is a behavior CMake exhibits if the full path provided to the library w/o proper soname.

中有所描述