使用 CMakelists 导入我自己的共享库
Import my own shared library with CMakelists
我在 CMakeLists.txt
中创建了一个共享库,方法是添加:
add_library(mylib SHARED ${SourceDir})
install (TARGETS mylib DESTINATION lib)
现在我可以在安装后的正确文件夹中看到文件 libmylib.so
,但我不确定如何将其导入另一个单独项目的 CMakeLists.txt
。
CMake 不仅允许您安装库,它还可以安装可供另一个项目使用的文件,以导入有关库目标的所有详细信息。这允许导入的目标被视为几乎相同,就好像它是导入目标的一部分一样。
第一步是向您的图书馆项目添加额外的安装细节:
add_library(mylib SHARED ${SourceDir})
install(TARGETS mylib
EXPORT myproj-targets
DESTINATION lib
)
install(EXPORT myproj-targets
DESTINATION lib/myproj
)
请注意添加的 EXPORT myproj-targets
到您原来的 install()
调用。这告诉 CMake 将您的 mylib
目标包含在目标列表中,它将作为导出集 myproj-targets
的一部分导出,第二个 install()
然后指示 CMake 作为安装的一部分生成步骤。
在您要使用该库的其他项目中,您只需要 include()
上面的第二个 install()
调用将创建的文件。假设您安装到 ${installBase}
,下面将导入上面导出的详细信息并使 mylib
目标可直接使用:
include("${installBase}/lib/cmake/myproj-targets.cmake)
add_executable(myexe exeSources.cpp)
target_link_libraries(myexe PRIVATE mylib)
您可以从 CMake documentation for install()
and this wiki article 中找到有关所有这些工作原理的合理解释。
我在 CMakeLists.txt
中创建了一个共享库,方法是添加:
add_library(mylib SHARED ${SourceDir})
install (TARGETS mylib DESTINATION lib)
现在我可以在安装后的正确文件夹中看到文件 libmylib.so
,但我不确定如何将其导入另一个单独项目的 CMakeLists.txt
。
CMake 不仅允许您安装库,它还可以安装可供另一个项目使用的文件,以导入有关库目标的所有详细信息。这允许导入的目标被视为几乎相同,就好像它是导入目标的一部分一样。
第一步是向您的图书馆项目添加额外的安装细节:
add_library(mylib SHARED ${SourceDir})
install(TARGETS mylib
EXPORT myproj-targets
DESTINATION lib
)
install(EXPORT myproj-targets
DESTINATION lib/myproj
)
请注意添加的 EXPORT myproj-targets
到您原来的 install()
调用。这告诉 CMake 将您的 mylib
目标包含在目标列表中,它将作为导出集 myproj-targets
的一部分导出,第二个 install()
然后指示 CMake 作为安装的一部分生成步骤。
在您要使用该库的其他项目中,您只需要 include()
上面的第二个 install()
调用将创建的文件。假设您安装到 ${installBase}
,下面将导入上面导出的详细信息并使 mylib
目标可直接使用:
include("${installBase}/lib/cmake/myproj-targets.cmake)
add_executable(myexe exeSources.cpp)
target_link_libraries(myexe PRIVATE mylib)
您可以从 CMake documentation for install()
and this wiki article 中找到有关所有这些工作原理的合理解释。