我正在尝试为我的C ++项目编写一个CMakeLists.txt
,这取决于一些第三方库。当包含头文件时,其中一个库对我来说遵循一种不寻常的模式。
我的代码的结构为:
project/
- CMakeLists.txt
- src/
- main.cpp
- lib/
- CMakeLists.txt
- moduleA/
-CMakeLists.txt
- fooA.cpp
- fooA.h
- barA.cpp
- barA.h
- moduleB/
- CMakeLists.txt
- fooB.cpp
- fooB.h
moduleA
取决于moduleB
,此外fooA
也取决于barA
。问题出在include
和fooA.cpp
的{{1}}语句中:
barA.cpp
与// fooA.cpp
#include "moduleA/fooA.h"
#include "moduleA/barA.h"
...
类似。当我在barA.cpp
之后运行make
时,它抱怨编译cmake
时找不到moduleA/fooA.h
。我不确定如何在fooA.cpp
中包含文件,或者我应该在moduleA
中包含这些文件。 CMakeLists.txt
正确编译。我无法更改库的代码,但是可以添加moduleB
文件。
我在cmake
中的CMakeLists.txt
和lib
中的CMakeLists.txt
如下。
moduleA
# lib/CMakeLists.txt
cmake_minimum_required(VERSION 3.1...3.14)
project(mylibs VERSION 1.0.0 LANGUAGES CXX)
add_subdirectory(moduleA)
add_subdirectory(moduleB)
错误本质上是编译器在编译#moduleA/CMakeLists.txt
cmake_minimum_required(VERSION 3.1...3.14)
project(moduleA VERSION 1.0.0 LANGUAGES CXX)
set (SOURCES fooA.cpp barA.cpp)
set (HEADERS fooA.h barA.h)
add_library(moduleA STATIC ${SOURCES} ${HEADERS})
target_link_libraries(moduleA PUBLIC moduleB)
源代码时找不到moduleA
头文件,因为moduleA
源文件在同一目录中的头文件中有一个异常(对我来说) moduleA
。