我有以下代码结构:
--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
#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)