仅从链接的库中渐变NativeExecutable

Gradle NativeExecutable from linked libs only

本文关键字:渐变 NativeExecutable 链接      更新时间:2023-10-16

我正在尝试使用gradle创建两个本机可执行文件。代码是用cpp编写的,到目前为止,这个过程是使用makefile完成的。

但是,我在尝试创建可执行文件时遇到了一个问题,因为它们本身没有任何源代码,只是通过链接其他一些库来创建的。

看看生成可执行文件的makefile中的行,可以更好地理解:

link.exe <linker flags> lib1.obj lib2.obj lib3.obj /out:my_executable_1.exe
link.exe <linker flags> lib1.obj lib4.obj /out:my_executable_2.exe

在gradle中,我现在已经完成了以下操作:

model {
    components {
        lib1(NativeLibrarySpec) {}
        lib2(NativeLibrarySpec) {}
        lib3(NativeLibrarySpec) {}
        lib4(NativeLibrarySpec) {}
        my_executable_1(NativeExecutableSpec) {
            sources {
                cpp {
                    lib library: 'lib1', linkage: 'static'
                    lib library: 'lib2', linkage: 'static'
                    lib library: 'lib3', linkage: 'static'
                }
            }
        }
       my_executable_2(NativeExecutableSpec) {
           sources {
               cpp {
                    lib library: 'lib1', linkage: 'static'
                    lib library: 'lib4', linkage: 'static'
                }
            }
       }
   }
}

当我运行my_executable_1Executable任务时,静态库被正确创建,但我没有得到任何可执行文件作为输出,因为它总是显示:

:linkMy_executable_1Executable UP-TO-DATE
:my_executable_1Executable UP-TO-DATE

有人知道怎么做吗?我必须在渐变配置中指定什么特殊的内容吗?

我必须承认,在这个具体的案件中,文件对我没有太大帮助。

除了尝试从一组静态库构建共享库之外,我的处境几乎相同。我的成绩是2.10级。

我可以确认gradle将二进制文件与相应源集中的"dummy cpp文件"链接,但这是一个丑陋的破解,我认为这应该可以立即工作,没有任何问题。(就像使用make文件一样简单…)