自定义命令需要调用CMake 3次才能获得所需的输出

我的项目非常简单。我有一个应用程序,其中包含一个基于Integration platfrom编写的库,因此它看起来像这样:

My app

  ----> Extension

        ----> Main library

该应用已交叉编译到Android。它们全部基于CMake。我正在使用CLion作为IDE。我添加了一个配置文件,该配置文件具有为Android构建所需的自定义工具链(即clang,适用平台的clang ++,来自Android SDK的cmake和来自Android NDK r20b的make)。问题是在生成所有需要的文件之前,我必须调用CMake 3次(在CLion中重新加载)。整个文件在下面列出。

在第一次运行时,它忽略了它是为android构建的事实(不会进入if(ANDROID)),并复制了针对Linux的预构建子可执行文件(默认)

在第二次运行时,它会忽略所需的 android.toolchain.cmake ,并且在此阶段进行构建时,无法向搜索路径添加android标头,但选择了正确的预构建子可执行文件

在第三次运行时,它使用 android.toolchain.cmake 文件并选择正确的子可执行文件。

之后,我可以执行构建,并且一切都可以正确编译。

我拥有的CMake:

add_executable(androidApp main.cpp)

target_include_directories(androidApp
        PUBLIC
        ../submodules/exten/src/libraries/main_lib/lib/include
        ../submodules/exten/src/libraries/main_lib/sdk/rlogging/include) //Headers from main library

target_link_libraries(androidApp
        PRIVATE
        exten) //Extension

install(TARGETS androidApp DESTINATION ${CMAKE_SOURCE_DIR}/bin)
install(FILES ../submodules/exten/src/libraries/main_lib/integration_app/resources/someFile.zip DESTINATION ${CMAKE_SOURCE_DIR}/bin)
install(FILES ../resources/someFile2.zip DESTINATION ${CMAKE_SOURCE_DIR}/bin/resources)

file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/bootsafe)
file(WRITE ${CMAKE_SOURCE_DIR}/bin/bootsafe/dummy "") //Required dir

add_custom_command(TARGET dongleApp POST_BUILD
        COMMAND ${CMAKE_SOURCE_DIR}/ndk/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/arm-linux-androideabi/bin/strip --strip-debug dongleApp
        WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
        COMMENT "Stripping debug symbols")

if (ANDROID)
    target_link_libraries(androidApp
            PRIVATE
            log)
endif (ANDROID) //Linking android lib

在不同的CMake(在主库级别)上,这是如何编写正确的预构建内容的选择

if(NOT ANDROID)
    set(PREBUILD_NAME "linux")
else()
    if(ANDROID_ABI STREQUAL "x86_64")
        set(PREBUILD_NAME "android-x86")
    else()
        set(PREBUILD_NAME "android-arm")
    endif()
endif()

用于生成makefile的命令:

/home/gravlok/companyName/app_v2/sdk/cmake/3.10.2.4988404/bin/cmake 
-DCMAKE_BUILD_TYPE=Debug
-DCMAKE_MAKE_PROGRAM=/home/gravlok/companyName/app_v2/ndk/android-ndk-r20b/prebuilt/linux-x86_64/bin/make
-DCMAKE_C_COMPILER=/home/gravlok/companyName/app_v2/ndk/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi28-clang
-DCMAKE_CXX_COMPILER=/home/gravlok/companyName/app_v2/ndk/android-ndk-r20b/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi28-clang++
-DANDROID=ON
-DCMAKE_TOOLCHAIN_FILE=/home/gravlok/companyName/app_v2/ndk/android-ndk-r20b/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-28
-G "CodeBlocks - Unix Makefiles"
/home/gravlok/companyName/app_v2

为什么我需要运行3次才能正确配置?

ling9012 回答:自定义命令需要调用CMake 3次才能获得所需的输出

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3020141.html

大家都在问