【问题标题】:Cannot add source file from different folder using CMake无法使用 CMake 从不同文件夹添加源文件
【发布时间】:2023-03-25 18:07:01
【问题描述】:

当我尝试在 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的路径是:

\app\src\main\jni\CMakeLists 

.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
)

知道如何解决这个问题吗?

【问题讨论】:

  • 您说:“.cpp 和 h 的路径是 libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO”所以您应该将 libs/Superpowered/AndroidIO/SuperpoweredAndroidAudioIO/SuperpoweredAndroidAudioIO.cpp 添加到您的添加库调用中。

标签: android c++ cmake android-studio-3.0


【解决方案1】:

如评论所述,您用于引用库源文件的路径似乎不正确。你提到的图书馆来源在这里:

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
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 2022-01-08
    • 1970-01-01
    • 2012-11-27
    • 2022-01-04
    • 2021-10-13
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多