gpt4 book ai didi

c++ - target_include_directories 如何工作 cmake 如何包含本地库

转载 作者:行者123 更新时间:2023-11-28 04:10:10 27 4
gpt4 key购买 nike

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

我读到如果使用 target_include_directories 可以使用 CMake 创建它我是 Cmake 的新手,在我的项目中配置这个目标时遇到问题

这是我的目录配置

enter image description here

这是我的 CMake 配置

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)

这是编译错误

[ 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 里面没有代码,但我只有 main 和 cout<<"foo";

我做错了什么?

最佳答案

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

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

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

您似乎已经使用 CMakeLists.txt 设置了您的项目目录你的source/headers目录中,所以你可以改变target_include_directories像这样设置:

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

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


不过,我建议您对项目进行一些重组:

<Project Directory>
CMakeLists.txt
include
bitcoinlib
< your bitcoinlib headers here >
src
bitcoinlib
< your bitcoinlib sources here >
main.cpp
target_include_directories(Decompiler PUBLIC 
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>)

关于c++ - target_include_directories 如何工作 cmake 如何包含本地库 <path/lib.h>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57996718/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com