Cmake 使用 target_include_directories 时无法指定包含目录

vin*_*zzo 6 c++ cmake

我在我的项目中使用子模块 GitHub,现在我想使用target_include_directoriesfor 将文件包含在我的项目类中

这是我的 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)
Run Code Online (Sandbox Code Playgroud)

运行 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.
Run Code Online (Sandbox Code Playgroud)

我是 C++ 和 cmake 的新手,我不明白我做错了什么

vin*_*zzo 9

我想添加此问题的解决方案,如何在评论中建议此代码错误,因为有两个问题

   target_include_directories(${PROJECT_NAME}  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/include/rapidjson/include)
Run Code Online (Sandbox Code Playgroud)
  1. 目标的第一个参数必须是可执行文件的名称,因此在本例中是 SpyCBlock
  2. 第二个问题是在目标声明之前定义目标所以,在目标之前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)
Run Code Online (Sandbox Code Playgroud)

现在我可以包括图书馆如何<bitcoin-cryptography-library/Sha256.h>