使用CMakelists导入我自己的共享库
我通过添加以下内容在使用CMakelists导入我自己的共享库,cmake,shared-libraries,Cmake,Shared Libraries,我通过添加以下内容在CMakeLists.txt中创建了一个共享库: add_library(mylib SHARED ${SourceDir}) install (TARGETS mylib DESTINATION lib) 现在我可以在安装后在正确的文件夹中看到文件libmylib.so,但我不确定如何将其导入另一个单独项目的CMakeLists.txtCMake不仅允许您安装库,它还可以安装其他项目用于导入库目标的所有详细信息的文件。这使得导入的目标的处理方式与导入目标的处理方式几乎相同
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作为安装步骤的一部分生成该目标
在要使用库的另一个项目中,您只需要包含()上述install()
调用中的第二个将创建的文件。假设您安装到${installBase}
,下面将导入上面导出的详细信息,并使mylib
目标可直接使用:
include("${installBase}/lib/cmake/myproj-targets.cmake)
add_executable(myexe exeSources.cpp)
target_link_libraries(myexe PRIVATE mylib)
您可以从和中找到关于所有这些如何工作的合理解释 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作为安装步骤的一部分生成该目标
在要使用库的另一个项目中,您只需要包含()上述install()
调用中的第二个将创建的文件。假设您安装到${installBase}
,下面将导入上面导出的详细信息,并使mylib
目标可直接使用:
include("${installBase}/lib/cmake/myproj-targets.cmake)
add_executable(myexe exeSources.cpp)
target_link_libraries(myexe PRIVATE mylib)
您可以从和中找到关于所有这些如何工作的合理解释 就我所关心的CMake而言,有两种方法可以使用库。如果您不确定现有(和位置)库,则应使用find
指令。但若你们知道你们应该直接使用图书馆。因此,如果您的另一个CMakeLists.txt
是使用libmylib.So
的项目的一部分,您不应该使用它的安装版本。谢谢。CMakeList是另一个项目的一部分,在这种情况下,CMakeList.txt
应该使用find
指令。但是根据CMake模块(比如FindMyLib.CMake
)应该随库提供。如果您不确定现有(和位置)库,则应使用find
指令。但若你们知道你们应该直接使用图书馆。因此,如果您的另一个CMakeLists.txt
是使用libmylib.So
的项目的一部分,您不应该使用它的安装版本。谢谢。CMakeList是另一个项目的一部分,在这种情况下,CMakeList.txt
应该使用find
指令。但是根据CMake模块(如FindMyLib.CMake
)应该随库提供。