使用CMake时包含特定路径



我有以下代码结构:

--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没有问题。

我的CMakeLists.txt文件是这样的

上层

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)

我可以使用one.hpp

我的问题是设计已经决定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/include的路径,将被认为是为了能够使用a_h_file.hpp?

编辑: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)

和另一个

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)

它也不工作。

首先,在顶级CMakeLists.txt:

中为您的公共目录定义一个INTERFACE目标
add_library(Common INTERFACE)
target_include_directories(Common INTERFACE common/include)

然后在你的目标中链接它,这会传播include目录:

target_link_libraries(mainpub PUBLIC Common)

最新更新