首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何工作target_include_directories cmake包括本地库如何<path/lib.h>

如何工作target_include_directories cmake包括本地库如何<path/lib.h>
EN

Stack Overflow用户
提问于 2019-09-18 15:57:34
回答 1查看 675关注 0票数 0

我使用外部文件来处理我的库,但是我不想使用文件C++中的相对路径,但是我想使用这个约定

我读到用CMake创建这个目标是可能的,如果使用目录,我是Cmake的新手,并且在我的项目中配置这个目标有问题

这是我的目录配置

这是我的CMake配置

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.6)
project(decompile-bitcoin-script)

set(CMAKE_CXX_STANDARD 11)

    set(SOURCE_FILES 
            main.cpp

            #Bitcoin Lib
            bitcoinlib/script.cpp
            bitcoinlib/script_error.cpp
            bitcoinlib/key_io.cpp
            bitcoinlib/pubkey.cpp
            bitcoinlib/sign.cpp
            bitcoinlib/standard.cpp
        )

    add_executable(Decompiler ${SOURCE_FILES})

    target_include_directories(Decompiler PUBLIC 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/bitcoinlib)

这是编译器错误。

代码语言:javascript
复制
[ 12%] Building CXX object CMakeFiles/Decompiler.dir/main.cpp.o
[ 25%] Building CXX object CMakeFiles/Decompiler.dir/bitcoinlib/script.cpp.o
/home/vincenzo/Github/decompiler-bitcoin-script/bitcoinlib/script.cpp:6:10: fatal error: bitcoinlib/script.h: No such file or directory
 #include <bitcoinlib/script.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
CMakeFiles/Decompiler.dir/build.make:86: recipe for target 'CMakeFiles/Decompiler.dir/bitcoinlib/script.cpp.o' failed
make[2]: *** [CMakeFiles/Decompiler.dir/bitcoinlib/script.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/Decompiler.dir/all' failed
make[1]: *** [CMakeFiles/Decompiler.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

在main中没有代码,但我只有一个cout<<"foo";

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 17:28:34

代码语言:javascript
复制
target_include_directories(Decompiler PUBLIC 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>/bitcoinlib)

这一行告诉编译器./bitcoinlib是包含路径的根。

所以#include <bitcoinlib/script.h>在找./bitcoinlib/bitcoinlib/script.h

您似乎已经在源代码/headers目录中设置了带有CMakeLists.txt的项目目录,因此可以这样更改target_include_directories设置:

代码语言:javascript
复制
target_include_directories(Decompiler PUBLIC 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)

或者,您可以将./bitcoinlib/script.cpp更改为#include <script.h>,因为该标头与.cpp文件位于同一个目录中。

不过,我建议您稍微调整一下您的项目:

代码语言:javascript
复制
<Project Directory>
    CMakeLists.txt
    include
        bitcoinlib
            < your bitcoinlib headers here >
    src
        bitcoinlib
            < your bitcoinlib sources here >
        main.cpp
代码语言:javascript
复制
target_include_directories(Decompiler PUBLIC 
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57996718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档