Связывание с внешней библиотекой с помощью Premake

Я не могу получить ссылку на внешнюю библиотеку с основной программой, используя premake. Например, я упростил проблему до этого примера:

./_external/ext.cpp

#include "ext.h"
int foo()
{
    return 4;
}

./_внешний/ext.h

#pragma once
int foo();

./main.cpp

#include "stdio.h"
#include "_external/ext.h"

int main()
{
    printf("%d", foo());
    return 0;
}

./premake4.lua

solution "Test"
    configurations { "Release", "Debug" }

project "TestMain"
    language "C++"
    kind "ConsoleApp"

    files "main.cpp"

    links
    {
        "_external/libfoo.a"
    }

Я создаю make-файлы GNU в среде Cygwin:

$ ./premake4.exe gmake
Building configurations...
Running action 'gmake'...
Generating Makefile...
Generating TestMain.make...
Done.

и я получаю следующую ошибку, когда я делаю:

$ make
==== Building TestMain (release) ====
Linking TestMain
/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../../i686-pc-cygwin/bin/ld: cannot find -lD:/test/_external/libfoo.a
collect2: ld returned 1 exit status
TestMain.make:93: recipe for target `TestMain.exe' failed
make[1]: *** [TestMain.exe] Error 1
Makefile:16: recipe for target `TestMain' failed
make: *** [TestMain] Error 2

Единственный обходной путь, который я нашел, — это использовать «linkoptions» вместо «links», чтобы избавиться от «-l», но для меня это больше похоже на хак, чем на решение. .


person mihaipopescu    schedule 07.05.2012    source источник
comment
На официальном сайте industriousone.com/linkoptions приведен пример связывания внешних библиотек с использованием параметров ссылки, так что это выглядит отвечать. Если вы добавите свое решение в качестве ответа, это может принести пользу другим.   -  person Ismael    schedule 29.11.2012


Ответы (1)


Вы делаете это правильно, но Premake ошибается. В генераторе make-файлов Premake была ошибка, из-за которой вещи не могли правильно скомпоноваться. Теперь она исправлена ​​как в стабильной версии (она станет версией 4.4), так и в dev (станет 5.0).

Приятно исправить это — надеюсь, это поможет.

person J. Perkins    schedule 29.01.2013