使用CMAKE时包括特定路径

发布于 2025-02-07 15:30:40 字数 2200 浏览 0 评论 0 原文

我有以下代码结构:

--src
   |--common--include--common---datatype--a_h_file.hpp
   |         |
   |          --src
   |
   |--main_lib
   |    |--------include-----one---one.hpp
   |          |
   |          |---src--------one----one.cpp
   |          CMakeLists.txt
   |---main.cpp
       CMakeLists.txt          

main.cpp 使用 one.hpp 毫无问题。

文件

上层

cmake_minimum_required(VERSION 3.0.0)

project(MyProject VERSION 1.0.0)


add_subdirectory(main_lib)

add_executable(myproj main.cpp)

target_link_libraries(myproj PUBLIC mainpub)

一样

add_library(mainpub
src/one/one.cpp)

target_include_directories(mainpub PUBLIC include)

与此

我的 cmakelists.txt 已决定 one.hpp 应该包括 a_h_file.hpp 这样

(one.hpp)

#pragma once

float addition(float,float);

#include "common/data_type/a_h_file.hpp"  //<---THIS!

class whatever{
    public:

    int number=1;
};

,所以我的问题是如何修改cmake文件以包括路径/src/common/inclus to将要考虑的路径,以便能够使用 a_h_file.hpp

编辑:我尝试过

cmake_minimum_required(VERSION 3.0.0)

project(MyProject VERSION 1.0.0)
add_library(Common INTERFACE)
target_include_directories(Common INTERFACE common/include)

add_subdirectory(main_lib)

add_executable(myproj main.cpp)

target_link_libraries(myproj PUBLIC mainpub)

,但在另一个方面

add_library(mainpub
src/one/one.cpp)

#target_include_directories(mainpub PUBLIC include ../common/include) 

#target_include_directories(mainpub PUBLIC Common)

#target_include_directories(mainpub PUBLIC include)

target_include_directories(mainpub PUBLIC Common include)

没有工作:(

fatal error: common/data_type/a_h_file.hpp: No such file or directory
     #include "common/data_type/a_h_file.hpp"
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~

edit2:

修改了第二个cmake文件也

add_library(mainpub
src/one/one.cpp)

target_link_libraries(mainpub PUBLIC Common)

target_include_directories(mainpub PUBLIC include)

无法正常工作。

I have the following code structure:

--src
   |--common--include--common---datatype--a_h_file.hpp
   |         |
   |          --src
   |
   |--main_lib
   |    |--------include-----one---one.hpp
   |          |
   |          |---src--------one----one.cpp
   |          CMakeLists.txt
   |---main.cpp
       CMakeLists.txt          

main.cpp uses one.hpp without problem.

My CMakeLists.txt files are like this

Upper level

cmake_minimum_required(VERSION 3.0.0)

project(MyProject VERSION 1.0.0)


add_subdirectory(main_lib)

add_executable(myproj main.cpp)

target_link_libraries(myproj PUBLIC mainpub)

and the other

add_library(mainpub
src/one/one.cpp)

target_include_directories(mainpub PUBLIC include)

With this I can use one.hpp

My problem is that by design it has been decided that one.hpp should include a_h_file.hpp like this

(one.hpp)

#pragma once

float addition(float,float);

#include "common/data_type/a_h_file.hpp"  //<---THIS!

class whatever{
    public:

    int number=1;
};

So, my question is how do I modify the CMake files to include the path /src/common/include to the paths that are going to be considered in order to be able to use a_h_file.hpp?

EDIT: I tried

cmake_minimum_required(VERSION 3.0.0)

project(MyProject VERSION 1.0.0)
add_library(Common INTERFACE)
target_include_directories(Common INTERFACE common/include)

add_subdirectory(main_lib)

add_executable(myproj main.cpp)

target_link_libraries(myproj PUBLIC mainpub)

and in the other

add_library(mainpub
src/one/one.cpp)

#target_include_directories(mainpub PUBLIC include ../common/include) 

#target_include_directories(mainpub PUBLIC Common)

#target_include_directories(mainpub PUBLIC include)

target_include_directories(mainpub PUBLIC Common include)

but it did not work :(

fatal error: common/data_type/a_h_file.hpp: No such file or directory
     #include "common/data_type/a_h_file.hpp"
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~

EDIT2:

Modified the second Cmake file to

add_library(mainpub
src/one/one.cpp)

target_link_libraries(mainpub PUBLIC Common)

target_include_directories(mainpub PUBLIC include)

It did not work either.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

用心笑 2025-02-14 15:30:41

首先,在顶级cmakelists.txt中为您的公共目录定义接口目标:

add_library(Common INTERFACE)
target_include_directories(Common INTERFACE common/include)

然后,只需在目标中链接到它,这将传播包含目录:

target_link_libraries(mainpub PUBLIC Common)

First, define an INTERFACE target for your common directory in the top-level CMakeLists.txt:

add_library(Common INTERFACE)
target_include_directories(Common INTERFACE common/include)

Then just link against it in your targets, which will propagate the include directories:

target_link_libraries(mainpub PUBLIC Common)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文