45114

Cmake Cannot specify include directories when use target target_include_directories

<h3>Question</h3>

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


<h3>Answer1:</h3>

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) <ol><li>The first argument of the target must be the name of the executable, so in this case, is SpyCBlock</li> <li>

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

</li> </ol>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

Recommend