How to find a library with cmake?

拜拜、爱过 提交于 2019-12-03 07:26:11

问题


To link an executable with a library that resides in a standard location, one can do the following in a CmakeLists.txt file:

create_executable(generate_mesh generate_mesh.cpp)
target_link_libraries(generate_mesh OpenMeshCore)

This would work if the library, that is being linked against, was placed in

/usr/local/lib/libOpenMeshCore.dylib

However, in this case the library resides under

/usr/local/lib/OpenMesh/libOpenMeshCore.dylib

How can I specify that target_link_libraries should really link against a library placed in a sibdirectory? I wonder there is some useful option to target_link_libraries that would specify that the library is in a subdirectory in a standandard location, e.g.

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore)

If that is not possible, is there a way to use find_library to search /usr/local/lib recursively, including its sub-directories, for the given library file?


回答1:


You can add different directories to find_library. To use this library call cmake by cmake -DFOO_PREFIX=/some/path ....

find_library( CPPUNIT_LIBRARY_DEBUG NAMES cppunit cppunit_dll cppunitd cppunitd_dll
            PATHS   ${FOO_PREFIX}/lib
                    /usr/lib
                    /usr/lib64
                    /usr/local/lib
                    /usr/local/lib64
            PATH_SUFFIXES debug )

find_library( CPPUNIT_LIBRARY_RELEASE NAMES cppunit cppunit_dll
            PATHS   ${FOO_PREFIX}/lib
                    /usr/lib
                    /usr/lib64
                    /usr/local/lib
                    /usr/local/lib64
            PATH_SUFFIXES release )

if(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)
    set(CPPUNIT_LIBRARY_RELEASE ${CPPUNIT_LIBRARY_DEBUG})
endif(CPPUNIT_LIBRARY_DEBUG AND NOT CPPUNIT_LIBRARY_RELEASE)

set( CPPUNIT_LIBRARY debug     ${CPPUNIT_LIBRARY_DEBUG}
                    optimized ${CPPUNIT_LIBRARY_RELEASE} )

# ...
target_link_libraries(foo ${CPPUNIT_LIBRARY})


来源:https://stackoverflow.com/questions/3380888/how-to-find-a-library-with-cmake

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!