我试图用C支持我的android项目。让我们说我有以下结构(一切都是源目录,没有二进制文件):
CMakeLists.txt
src/main/cpp/|
|---Executable1/
|---Executable2/
|---deps/
在这个CMakeLists.txt中我有:
cmake_minimum_required(VERSION 3.4.1)
project(ProjectName)
set(CMAKE_VERBOSE_MAKEFILE on)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/src/main/assets/${ANDROID_ABI}")
add_subdirectory(src/main/cpp/deps)
add_subdirectory(src/main/cpp/Executable1)
add_subdirectory(src/main/cpp/Executable2)
In" deps"文件夹我有以下结构:
deps/|
|---CMakeLists.txt
|---Library1/
|---LIbrary2/
在这个CMakeLists.txt中我有:
add_subdirectory(Library1)
add_subdirectory(Library2)
在Library2中,我有2个模块:
Library2/|---CMakeLists.txt
|---Module1/
|---Module2/
在这个CMakeLists.txt中我有
project(Library2)
include_directories ( BEFORE SYSTEM ${CMAKE_CURRENT_BINARY_DIR}/Module1
${CMAKE_CURRENT_BINARY_DIR}/Module2
Module1
. )
add_subdirectory( Module1 )
add_subdirectory( Module2 )
Module1和Module2是我添加的库
add_library(Module1 STATIC sourceM1_1.c sourceM1_2.c ...)
和
add_library(Module2 STATIC sourceM2_1.c sourceM2_2.c ...)
分别在他们的CMakeLists.txt中。
Executable2在其CMakeLists.txt:
中add_executable(Executable2 sourceE2_1.c sourceE2_2.c ...)
target_link_libraries(Executable2 Module1 Module2)
如果以这种方式制作,我在编译Module1时会出错。
错误表示找不到某些标题。这些标题存在于" Library2"目录。
如果我在最顶层的CMakeLists.txt中注释掉了Executable2,那么一切都很好。
所以问题是如何强制CMake执行" Library2 / CMakeLists.txt"或者我需要做些什么来添加所需的包含目录?我想我可以将它们直接添加到" Module1"的CMakeLists.txt中。和"模块2"但我认为这不是一个好习惯。
答案 0 :(得分:0)
好吧,过了一段时间我自己找到了解决方法。我无法让Cmake忽略Library2 CMakeLists.txt,所以我只是将缺少的include_directory引用到Library2到Module1和Module2 CMakeLists.txt。