2010-08-01 71 views
12

要与驻留在标准位置的库链接的可执行文件,一个可以做一个的CMakeLists.txt文件中的以下内容:如何用cmake查找库?

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

如果库中,要对链接这会工作,被置于在

/usr/local/lib/libOpenMeshCore.dylib 

然而,在这种情况下,库位于下

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

我怎么可以指定target_link_libraries寿ld真的链接到一个放在sibdirectory中的库吗?我想知道target_link_libraries有一些有用的选项可以指定库位于标准位置的子目录中,例如

target_link_libraries(generate_mesh OpenMesh/OpenMeshCore) 

如果这是不可能的,是有办法使用find_library搜索/usr/local/lib递归,包括它的子目录,对于给定的库文件的方法吗?

回答

21

您可以将不同的目录添加到find_library。要使用这个库调用cmake 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}) 
+0

为我工作的一种享受,谢谢! – alexr 2011-04-15 20:48:39