如何使用 ExternalProject 的编译器构建可执行文件

How to build executable with a compiler from ExternalProject

我有一个生成编译器的外部项目

include(ExternalProject)

ExternalProject_Add(gprolog
        GIT_REPOSITORY    "git@github.com:didoudiaz/gprolog.git"
        GIT_TAG           "master"
        SOURCE_DIR        "${CMAKE_SOURCE_DIR}/3rdparty/gprolog"
        BUILD_IN_SOURCE   true
        CONFIGURE_COMMAND cd src && ./configure --with-install-dir=${CMAKE_SOURCE_DIR}/3rdparty/gprolog-build
        BUILD_COMMAND     cd src && make
        INSTALL_COMMAND   cd src && make install
)

因此,我想 运行:

add_executable(runner src/runner.c app/application.pro)
include_directories(runner "${CMAKE_SOURCE_DIR}/3rdparty/gprolog-build/include")

但我需要使用 ${CMAKE_SOURCE_DIR}/3rdparty/gprolog-build/bin/gplc.

而不是 gccclang

当我礼貌地要求 CMake 通过添加

假装 gplc 只是另一个 C 编译器时
set(CMAKE_C_COMPILER "${CMAKE_SOURCE_DIR}/3rdparty/gprolog-build/bin/gplc")

它用

对着我尖叫
Cannot get compiler information:
    Compiler exited with error code 1: .../gprolog/3rdparty/gprolog-build/bin/gplc -xc -g -isysroot ..../Developer/SDKs/MacOSX11.3.sdk -fpch-preprocess -v -dD -E
    Apple clang version 12.0.5 (clang-1205.0.22.11)
    Target: x86_64-apple-darwin20.5.0
    Thread model: posix
    InstalledDir: .../XcodeDefault.xctoolchain/usr/bin
    clang: warning: -lm: 'linker' input unused [-Wunused-command-line-argument]
    clang: error: cannot specify -o when generating multiple output files
    compilation failed

缺少逆向工程 CMake 的 enable_language 实现模块来为 Prolog 添加您自己的模块,您总是可以走 add_custom_command 的路线并要求您的编译器生成目标文件,这些文件可以包含为add_executable 命令中的来源。

如果您对有关 Prolog 编译器如何工作的问题添加一些细节,我可以帮助您编写自定义命令。