我正在使用Clion,并尝试在CMakeLists.txt
文件中使用cryptopp-cmake作为cryptopp,因为Cryptopp在其默认项目存储库中没有CMakeLists.txt
文件。我的CMakeLists.txt
有这个Cryptopp相关的内容:
# Include usage of external projects
include(FetchContent)
# Get the cryptopp CMakeLists.txt file for cryptopp package
set(CRYPTOPP_CMAKE "cryptopp-cmake")
FetchContent_Declare(
${CRYPTOPP_CMAKE}
GIT_REPOSITORY https://github.com/noloader/cryptopp-cmake
GIT_TAG CRYPTOPP_8_2_0
)
FetchContent_GetProperties(${CRYPTOPP_CMAKE})
if(NOT ${CRYPTOPP_CMAKE}_POPULATED)
FetchContent_Populate(${CRYPTOPP_CMAKE})
endif()
# Get the cryptopp package
set(CRYPTOPP "cryptopp")
FetchContent_Declare(
${CRYPTOPP}
GIT_REPOSITORY https://github.com/weidai11/cryptopp
GIT_TAG CRYPTOPP_8_2_0
)
FetchContent_GetProperties(${CRYPTOPP})
if(NOT ${CRYPTOPP}_POPULATED)
FetchContent_Populate(${CRYPTOPP})
endif()
# !!! IMORTANT !!! before using add_subdirectory(), include_directories() and set(CRYPTOPP_LIB....) commands.
file(COPY ${${CRYPTOPP_CMAKE}_SOURCE_DIR}/CMakeLists.txt DESTINATION ${${CRYPTOPP}_SOURCE_DIR})
add_subdirectory(${${CRYPTOPP}_SOURCE_DIR} ${${CRYPTOPP}_BINARY_DIR})
include_directories(${${CRYPTOPP}_SOURCE_DIR})
set(CRYPTOPP_LIB ${${CRYPTOPP}_BINARY_DIR}/libcryptopp.so)
# Link the project libraries to the executable
target_link_libraries(my_project PRIVATE
${CRYPTOPP_LIB}
)
当我让它在CLion中运行时,CMakeLists.txt
得到了应有的复制,但我得到了错误
No rule to make target '_deps/cryptopp-build/libcryptopp.so', needed by '../my_project/bin/my_project'. Stop.
尽管成功复制了CMakeLists.txt
,但在第一次运行时没有生成libcryptopp.so
文件,不幸的是,我需要在 CLion 中使用“rebuild project”选项来生成libcryptopp.so
并填充${CRYPTOPP_LIB}
变量。
是否有一种方法可以使Cryptopp的CMakeLists.txt
文件在第一次运行时影响我的构建并生成libcryptopp.so
文件?
2条答案
按热度按时间dvtswwa31#
如果一个项目创建了一个
add_library
的库,那么使用target名称链接到该库。在这种情况下不要使用库文件。根据cryptopp项目的CMakeLists.txt,库目标的名称是
cryptopp-shared
,所以只需链接它:详细说明
您将可执行文件与生成的库文件链接。所以你需要确保,这个文件的生成是在链接你的可执行文件之前执行的。
在CMake中,操作之间的顺序由目标之间的依赖关系指定。因此,您的可执行文件应该被指定为dependent从库作为目标。在CMake中,目标之间的依赖关系由
add_dependencies()
命令指定。然而,CMake提供了一种方便的方法,可以同时链接到库并指定依赖项。当您链接到库target(由
add_library
创建)时:p8h8hvxi2#
**更新:**如果使用
CRYPTOPP_8_6_0
以上版本的cryptopp-cmake
,该流程需要更新,将无法正常工作。我最终在Linux下使用了这个设置: