ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main libhello.so)
INCLUDE_DIRECTORIES(/tmp/t3/include/hello /tmp/t3/lib)
LINK_DIRECTORIES(/tmp/t3/lib)
这种情况下会出错,说找不到引用,原因是ADD_EXECUTABLE出现在LINK_DIRECTORIES之前。正确的做法是将LINK_DIRECTORIES放在ADD_EXECUTABLE之前。如下:
LINK_DIRECTORIES(/tmp/t3/lib)
ADD_EXECUTABLE(main main.cpp)
TARGET_LINK_LIBRARIES(main libhello.so)
INCLUDE_DIRECTORIES(/tmp/t3/include/hello /tmp/t3/lib)
另外,官网不推荐使用INCLUDE_DIRECTORIES,原文如下:
Note that this command [link_directories] is rarely necessary. Library locations returned by find_package() and find_library() are absolute paths. Pass these absolute library file paths directly to the target_link_libraries() command. CMake will ensure the linker finds them.
CMake链接库顺序与目录设置
本文介绍在使用CMake构建项目时,正确设置链接库目录和链接库的顺序至关重要。若LINK_DIRECTORIES指令位于ADD_EXECUTABLE之后,会导致链接器无法找到库文件。应先设置链接库目录,再添加可执行文件。此外,官方建议直接通过target_link_libraries传递绝对路径,避免使用INCLUDE_DIRECTORIES。
694

被折叠的 条评论
为什么被折叠?



