Cmake Cannot specify include directories when use target target_include_directories

你说的曾经没有我的故事 提交于 2020-06-16 03:06:38

问题


I'm using the submodule GitHub inside my project and now I want to use the target_include_directories for including the file inside the my project class

This is my cmake configuration

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)

When run CMake I have this error

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.

I'm new with the C++ and the cmake and I can't understand what I'm wrong


回答1:


I want add the solution to this problem, how suggestion in the comment this code this wrong because have two problem

   target_include_directories(${PROJECT_NAME}  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/include/rapidjson/include)
  1. The first argument of the target must be the name of the executable, so in this case, is SpyCBlock
  2. The second problem is the definition of the target before the declaration of the target so, the target_include_directories(SpyCBlock ...) is defined before the add_executable(${PROJECT_NAME} ...)

    The minimal example correct is

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)

now I can include the library how <bitcoin-cryptography-library/Sha256.h>



来源:https://stackoverflow.com/questions/57671273/cmake-cannot-specify-include-directories-when-use-target-target-include-director

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!