在CMake中添加外部项目,并在文件中引用内部项目

问题描述 投票:0回答:1

我尝试运行 SoftHSMv2,我想在外部项目中进行此操作 https://github.com/opendnssec/SoftHSMv2这是我下载的git中的链接,我想在src文件夹下添加项目CLI。

这是CmakeList.txt:

project(CLI)

set(INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/../lib/pkcs11
                 )

set(SOURCES main.cpp
            )

if(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
    list(APPEND INCLUDE_DIRS ${PROJECT_SOURCE_DIR}/../../lib/win32 ${CMAKE_CURRENT_SOURCE_DIR}/../win32)
endif()

include_directories(${INCLUDE_DIRS})
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} softhsm2-static ${CRYPTO_LIBS} ${SQLITE3_LIBS} ${CMAKE_DL_LIBS})
target_compile_options(${PROJECT_NAME} PRIVATE ${COMPILE_OPTIONS})

install(TARGETS ${PROJECT_NAME}
        DESTINATION ${CMAKE_INSTALL_BINDIR}
        )

install(FILES ${PROJECT_NAME}.1
        DESTINATION ${CMAKE_INSTALL_MANDIR}/man1
        )

这是我的 MakeFile.am:

MAINTAINERCLEANFILES =      $(srcdir)/Makefile.in

bin_PROGRAMS = cli

AM_CPPFLAGS =           -I$(srcdir)/common \
                -I$(srcdir)/crypto \
                -I$(srcdir)/data_mgr \
                -I$(srcdir)/handle_mgr \
                -I$(srcdir)/object_store \
                -I$(srcdir)/pkcs11 \
                -I$(srcdir)/session_mgr \
                -I$(srcdir)/slot_mgr \
                @CRYPTO_INCLUDES@

lib_LTLIBRARIES =       libsofthsm2.la

clisofthsm2_la_SOURCES = main.cpp 
                

libsofthsm2_la_LDFLAGS =    -version-info @VERSION_INFO@ \
                -avoid-version -module

# Create a convenience library from all the other convenience library; this is
# necessary to resolve circular dependencies when statically linking the test
# executables
noinst_LTLIBRARIES =        libsofthsm_convarch.la

libsofthsm_convarch_la_SOURCES =

libsofthsm_convarch_la_LIBADD = $(libsofthsm2_la_LIBADD)

EXTRA_DIST =            $(srcdir)/CMakeLists.txt \
                $(srcdir)/*.h \
                $(srcdir)/pkcs11/*.h \
                $(srcdir)/*.cpp \
                $(srcdir)/pkcs11/*.cpp \


命令 cmake .. 工作并为我创建了 sln 文件 但是当我尝试运行该项目时,我在另一个项目中包含了很多错误, 例如: 严重性代码 说明 项目文件行抑制状态工具 错误(活动) E1696 无法打开源文件“SessionManager.h”CLI C:\Users \Desktop\BBB\SoftHSM2_Asym\src\lib\SoftHSM.h 40 Visual C++ IntelliSense

我需要如何更改 cmake 才能使其工作? 谢谢!

cmake c++-cli softhsm
1个回答
0
投票

要在 CMake 中添加外部项目并引用内部项目,可以按照以下步骤操作:

从 GitHub 存储库下载外部项目 SoftHSMv2:https://github.com/opendnssec/SoftHSMv2。 在项目的根目录中创建一个新目录,我们将其称为external。 将下载的 SoftHSMv2 项目移动到外部目录中。 在主 CMakeLists.txt 文件中,添加以下行以包含外部项目:

# Add the external project
add_subdirectory(external/SoftHSMv2)

在 CLI 项目的 CMakeLists.txt 文件中,更新 include_directories 行以包含必要的内部项目目录:

include_directories(${INCLUDE_DIRS}
                    ${PROJECT_SOURCE_DIR}/../lib/pkcs11
                    ${PROJECT_SOURCE_DIR}/../lib/SoftHSMv2/src
                    ${PROJECT_SOURCE_DIR}/../lib/SoftHSMv2/src/lib
                    ${PROJECT_SOURCE_DIR}/../lib/SoftHSMv2/src/lib/pkcs11
                    )

更新 target_link_libraries 行以链接内部项目中的必要库:

target_link_libraries(${PROJECT_NAME} softhsm2-static ${CRYPTO_LIBS} ${SQLITE3_LIBS} ${CMAKE_DL_LIBS} softhsm2)

最后,确保更新 Makefile.am 文件中的路径以包含必要的内部项目目录:

AM_CPPFLAGS =           -I$(srcdir)/common \
                        -I$(srcdir)/crypto \
                        -I$(srcdir)/data_mgr \
                        -I$(srcdir)/handle_mgr \
                        -I$(srcdir)/object_store \
                        -I$(srcdir)/pkcs11 \
                        -I$(srcdir)/session_mgr \
                        -I$(srcdir)/slot_mgr \
                        -I$(srcdir)/lib \
                        -I$(srcdir)/lib/pkcs11 \
                        -I$(srcdir)/lib/SoftHSMv2/src \
                        -I$(srcdir)/lib/SoftHSMv2/src/lib \
                        -I$(srcdir)/lib/SoftHSMv2/src/lib/pkcs11 \
                        @CRYPTO_INCLUDES@

libsofthsm2_la_LDFLAGS = -version-info @VERSION_INFO@ \
                        -avoid-version -module

clisofthsm2_la_SOURCES = main.cpp

通过执行这些步骤,您应该能够将 SoftHSMv2 的内部项目包含在 CLI 项目中,并解决您遇到的包含错误。

© www.soinside.com 2019 - 2024. All rights reserved.