c++ - Cmake使用目标target_include_directories时无法指定包含目录
问题描述
我在我的项目中使用子模块 GitHub,现在我想使用target_include_directories
for 将文件包含在我的项目类中
这是我的 cmake 配置
cmake_minimum_required(VERSION 3.9)
project(SpyCBlock)
set(CMAKE_CXX_STANDARD 14)
#bitcoin rpc lib
find_library(bitcoinapi 0.3 REQUIRED)
target_include_directories(rapidjson PUBLIC include/rapidjson/include)
target_include_directories(spycblockrpc PUBLIC include/spycblockrpc)
target_include_directories(btccryptography PUBLIC include/bitcoin-cryptography-library)
add_executable(
${PROJECT_NAME}
#other inclusion file cpp
#cpp-properties file include
include/cpp-properties/src/Properties.cpp
include/cpp-properties/src/PropertiesParser.cpp
include/cpp-properties/src/PropertiesUtils.cpp
#include bitcoin-cryptography-library
include/bitcoin-cryptography-library/cpp/Sha256.cpp
include/bitcoin-cryptography-library/cpp/Sha256Hash.cpp
include/bitcoin-cryptography-library/cpp/Utils.cpp
#include spycblocrpc
include/spycblockrpc/core/graph/TransactionGraph.cpp
include/spycblockrpc/core/graph/WrapperInformations.cpp
include/spycblockrpc/ConfiguratorSingleton.cpp
include/spycblockrpc/commands/DecodeScriptCommand.cpp
include/spycblockrpc/commands/DecodeRawTransaction.cpp
include/spycblockrpc/commands/HeightBlockchainCommand.cpp
include/spycblockrpc/commands/DecodeBlockAtIndexCommand.cpp
)
#bitcoin rpc lib
target_link_libraries(SpyCBlockTests bitcoinapi)
target_link_libraries(${PROJECT_NAME} bitcoinapi)
运行 CMake 时出现此错误
Starting to parse CMake project.
CMake Error at CMakeLists.txt:20 (target_include_directories):
Cannot specify include directories for target "rapidjson" which is not
built by this project.
CMake Error at CMakeLists.txt:22 (target_include_directories):
Cannot specify include directories for target "spycblockrpc" which is not
built by this project.
CMake Error at CMakeLists.txt:24 (target_include_directories):
Cannot specify include directories for target "btccryptography" which is
not built by this project.
CMake Error at CMakeLists.txt:26 (target_compile_definitions):
Cannot specify compile definitions for target "cppproperties" which is not
built by this project.
我是 C++ 和 cmake 的新手,我不明白我错了什么
解决方案
我想添加这个问题的解决方案,正如评论中所建议的,代码有两个问题:
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/include/rapidjson/include)
- 目标的第一个参数必须是可执行文件的名称,所以在这种情况下,是 SpyCBlock
- 第二个问题是在声明目标之前定义目标,
target_include_directories(SpyCBlock ...)
定义在目标之前add_executable(${PROJECT_NAME} ...)
一个最小的正确示例是:
add_executable(
${PROJECT_NAME}
#other inclusion file cpp
#cpp-properties file include
include/cpp-properties/src/Properties.cpp
include/cpp-properties/src/PropertiesParser.cpp
include/cpp-properties/src/PropertiesUtils.cpp
#include bitcoin-cryptography-library
include/bitcoin-cryptography-library/cpp/Sha256.cpp
include/bitcoin-cryptography-library/cpp/Sha256Hash.cpp
include/bitcoin-cryptography-library/cpp/Utils.cpp
#include spycblocrpc
include/spycblockrpc/core/graph/TransactionGraph.cpp
include/spycblockrpc/core/graph/WrapperInformations.cpp
include/spycblockrpc/ConfiguratorSingleton.cpp
include/spycblockrpc/commands/DecodeScriptCommand.cpp
include/spycblockrpc/commands/DecodeRawTransaction.cpp
include/spycblockrpc/commands/HeightBlockchainCommand.cpp
include/spycblockrpc/commands/DecodeBlockAtIndexCommand.cpp
)
target_include_directories(${PROJECT_NAME} PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/include/rapidjson/include)
现在我可以像这样包含库<bitcoin-cryptography-library/Sha256.h>
。
推荐阅读
- c++ - 沿二次贝塞尔曲线移动点的快速方法
- javascript - 用 JS 随机改变视频 - javascript
- kubernetes - 仅将 OAuth 规则应用于 Ingress Controller 中的一个应用程序
- html - HTML 编辑未显示
- docker - Docker Desktop 4.1.0 - 在 Windows 10 上安装失败:进程 InstallerCli.exe 以代码 1 退出
- c# - 从列表中检索对象并将它们传送到 Unity 中的特定位置
- saml-2.0 - 如何将 spring-security-saml2-service-provider 中用于 AuthnRequest 的签名算法更改为 RSA-PSS?
- pyserial - pySerial 运行命令列出端口
- linux - linux命令按顺序将日期(YYYY.MMDD)重命名为数字(001,002,...,066,067)
- python - 用于将有限正则表达式转换为文本数组的 Python 包?