如何在CMake中使include指令看起来像“common/Common.h”?

yrdbyhpb  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(156)

我有一个使用CMake的C++项目,我想让我的#include给予一些关于它们所包含的东西是来自于没有..的东西的想法。对于下面的例子,我可以通过使用#include "Common.h"#include "../common/Common.h"来使用MainWindow.h中的Common.h,这取决于我如何设置我的CMake。
是否有一种方法可以通过使用#include "common/Common.h",也就是使用某个基本文件夹的相对路径,从MainWindow.h中包含Common.hsrc可以工作)?
文件夹结构大致为:

src:
    common:
        Common.h
    gui:
        MainWindow.h
        MainWindow.cpp
    ...

C在stc/gui/MainWindow.h中为#include "../common/Common.h"制作。

src:
    CMakeLists.txt
    common:
        Common.h
    gui:
        MainWindow.h
        MainWindow.cpp
    ...

文件名

# ... CMake boiler plate. ...

add_executable(GUI common/Common.h gui/MainWindow.h gui/MainWindow.cpp)

C为#include "Common.h"制作

src:
    CMakeLists.txt
    common:
        CMakeLists.txt
        Common.h
    gui:
        MainWindow.h
        MainWindow.cpp
    ...

文件名

# ... CMake boiler plate. ...

add_libary(GUICommon Common.h)

文件名

# ... CMake boiler plate. ...

add_executable(GUI gui/MainWindow.cpp)

add_subdirectory(common)

target_link_libraries(GUI PRIVATE GUICommon)

谢谢你的帮助!

hgb9j2n6

hgb9j2n61#

您需要为GUIComon目标添加包含目录。
在以下行之后:

add_libary(GUICommon Common.h)

加了

target_include_directories(GUICommon PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

使用target_link_libraries()链接到GUICommon时,include目录将添加到当前目标,因为您在target_include_directories()中具有PUBLIC

相关问题