无法使用 CMake 从其他文件夹添加源文件
Cannot add source file from different folder using CMake
当我尝试在 CMake 中添加.cpp和 .h 文件时出现错误。同一文件夹中的头文件正常工作。 我在Android Studio 3.0上工作。 错误是:
CMake Error at CMakeLists.txt:26 (add_library):
Cannot find source file:
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO.cpp
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
.hxx .in .txx
CMake 的路径是:
appsrcmainjniCMakeLists
.cpp 和 .h 文件的路径为:
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO
CMake 文件是:
cmake_minimum_required(VERSION 3.4.1)
set(
PATH_TO_SUPERPOWERED "libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO"
CACHE STRING ""
)
message(${ANDROID_ABI})
file(GLOB CPP_FILES
"*.h"
"*.cpp")
add_executable(CPPFILES ${CPP_FILES})
add_library(
libs
SHARED
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO.cpp
)
target_include_directories(libs PRIVATE
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO
)
include_directories(src/main/jni)
include_directories(${PATH_TO_SUPERPOWERED})
target_link_libraries(
libs
log
android
OpenSLES
${PATH_TO_SUPERPOWERED}/libSuperpoweredAndroid.a
)
知道如何解决这个问题吗?
如注释所示,用于引用库源文件的路径看起来不正确。你提到图书馆资源在这里:
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO
因此,库源文件SuperpoweredAndroidAudioIO.cpp
的完整路径应为:
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO/SuperpoweredAndroidAudioIO.cpp
更好的是,使用已在CMake 变量PATH_TO_SUPERPOWERED
中定义的路径来引用源文件。如果它确实是相同的路径,请为自己节省一些类型,并尽可能使用变量引用它:
cmake_minimum_required(VERSION 3.4.1)
set(
PATH_TO_SUPERPOWERED "libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO"
CACHE STRING ""
)
message(${ANDROID_ABI})
file(GLOB CPP_FILES
"*.h"
"*.cpp")
add_executable(CPPFILES ${CPP_FILES})
# Reference the source file using the path defined in your CMake variable.
add_library(
libs
SHARED
${PATH_TO_SUPERPOWERED}/SuperpoweredAndroidAudioIO.cpp
)
# You can remove this call because it is redundant with
# the 'include_directories' call below.
target_include_directories(libs PRIVATE
libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO
)
# You can merge the two 'include_directories' calls into one.
include_directories(
src/main/jni
${PATH_TO_SUPERPOWERED}
)
target_link_libraries(
libs
log
android
OpenSLES
${PATH_TO_SUPERPOWERED}/libSuperpoweredAndroid.a
)
相关文章:
- 如何将更多文件夹添加到c++include路径
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 在其他文件中创建类时在 c++ 项目中不起作用
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 如何在文档文件夹中创建目录
- "assimp/config.h"找不到,但它在文件夹中
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- C++入门 5 版:类消息和文件夹
- 如何在其他文件中使用函数
- 无法使用 CMake 从其他文件夹添加源文件
- 如何在 CMake 中构建其他文件夹
- 如何将文件打印到其他文件夹
- 如何将用于创建文件的文件的路径提供给C++中的其他文件夹
- Robocopy在项目中使用具有英语以外的其他名称的文件夹中时会产生构建错误
- 为什么 Boost 和其他库的某些部分(如 Folly)在详细信息子文件夹中
- 在源代码所在文件夹以外的其他文件夹中创建文件
- 使用其他文件夹中的源代码时未解析的外部
- 如何从存储在其他文件夹中的C++运行linux可执行文件
- 在使用mkdir()创建一个文件夹后,我如何让程序将文件和其他信息保存到新文件夹中?