Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake无法从子文件夹中找到包含文件_C++_Cmake - Fatal编程技术网

C++ CMake无法从子文件夹中找到包含文件

C++ CMake无法从子文件夹中找到包含文件,c++,cmake,C++,Cmake,我想在我的CMake项目中添加包含一些附加功能的子文件夹。MyProject是一个共享库。理想情况下,只包含子文件夹中的文件并将它们一起编译就可以了。但到目前为止,我已经找到了一种方法,只把它作为一个静态库包含进来,这也适合我。因此,我的文件结构应如下所示: MyProject src main.cpp include main.h CMakeLists.txt 3dparty SomeFolder

我想在我的CMake项目中添加包含一些附加功能的子文件夹。MyProject是一个共享库。理想情况下,只包含子文件夹中的文件并将它们一起编译就可以了。但到目前为止,我已经找到了一种方法,只把它作为一个静态库包含进来,这也适合我。因此,我的文件结构应如下所示:

MyProject
    src
        main.cpp
    include
        main.h
    CMakeLists.txt
    3dparty
        SomeFolder
           src
               file.cpp
           include
               file.h
           CMakeLists.txt
MyProject/CMakeLists.txt:

cmake_最低要求版本2.8 项目我的项目 fileglobsrc。src/*.cpp fileGLOB公司。包括/*.h setCMAKE_库_输出_目录${CMAKE_当前_源_目录}/lib setCMAKE_运行时_输出_目录${CMAKE_当前_源目录}/bin 添加库${PROJECT\u NAME}共享${SRC}${INC} 目标目录${PROJECT\u NAME}PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include 添加子目录3dparty/SomeFolder 和3dparty/SomeFolder/CMakeLists.txt:

项目文件夹 fileglobsrc。src/*.cpp fileGLOB公司。包括/*.h 添加库${PROJECT\u NAME}静态${SRC}${INC} 目标目录${PROJECT\u NAME}PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include 我可以编译这个项目,我看到编译器使用了SomeFolder.a,所以看起来不错。但由于某些原因,我无法在main.*中包含来自3dparty/SomeFolder/include的文件。到目前为止,我已经尝试:

#include "file.h"
#include "3dparty/SomeFolder/file.h"
但什么都不管用。我得到错误:“file.h”文件找不到


我做错了什么?如何包含子项目中的文件?

因为您忘记将子库链接到主库。Usr target_link_libraries

好的,我已经将target_link_libraries${PROJECT_NAME}SomeFolder添加到主CMakeLists.txt中,看起来效果不错。是否可以在3dparty/SomeFolder/CMakeLists.txt中添加这一行?如果只使用一条指令添加子文件夹就好了。不,我相信您在这里做了一些错误的假设。根据您的经验,add_subdirectory对链接没有任何作用,而target_link_库的参数是目标可执行文件或库,而不是目录路径。通常的链接方式只是使用target_link_库为每个目标指定依赖项。如果CMake能够在某一点上唯一地将一个依赖项标识为另一个目标,它将知道该做什么。