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



我正在使用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

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

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

如果目标是项目的一部分,则应该链接目标,而不是文件。在您的情况下,它将是target_link_libraries(mytest mymodule)

但是如果由于某些原因需要链接到一个完整的路径,CMake有一些特性,在文档中有描述。因此,在您的情况下,它将完整路径转换为-lmymodule,因为这是CMake显示的行为,如果提供给库的完整路径没有适当的名称。

最新更新