Создание статической библиотеки и привязка к ней с помощью premake - PullRequest
6 голосов
/ 25 ноября 2011

В настоящее время я пытаюсь узнать, как использовать premake 4, чтобы применить его к OpenGL sdk . В настоящее время я пытаюсь создать решение Visual Studio 2010, которое создает 2 проекта, один из которых является статической библиотекой, а другой содержит один основной исходный файл с методом main.

Этот проект чрезвычайно прост и предназначен исключительно для изучения premake. В проекте статической библиотеки с именем Test у меня есть 2 файла, Test.h и Test.cpp. Test.h содержит прототип для метода print (). print () просто выводит строку на консоль. Используя premake, я связал статическую библиотеку с проектом Main, а в main.cpp я включил файл Test.h. Моя проблема заключается в следующем: в VS2010 я получаю эту ошибку при попытке построить:

1>main.obj : error LNK2019: unresolved external symbol "void __cdecl print(void)" (? print@@YAXXZ) referenced in function _main  
1>.\Main.exe : fatal error LNK1120: 1 unresolved externals

Вот мой код в 4 файлах, premake4.lua:

solution "HelloWorld"
    configurations {"Debug", "Release"}
project "Main"
    kind "ConsoleApp"
    language "C++"
    files{
        "main.cpp"

    }
    configuration "Debug"
        defines { "DEBUG" }
        flags { "Symbols" }

    configuration "Release"
        defines { "NDEBUG" }
        flags { "Optimize" } 
    links {"Test"}
project "Test"
    kind "StaticLib"
    language "C++"
    files{
        "test.h",
        "test.cpp"

    }

Test.cpp:

#include <iostream>

void print(){
    std::cout << "HELLO" << std::endl;
}

Test.h:

void print();

Main.cpp:

#include <conio.h>
#include "test.h"
int main(){
    print();
    getch();
    return 0;
}   

Если вам интересно, почему там есть функция getch (), на моем компьютере консоль сразу закрывается, когда она достигает значения возврата 0, поэтому я использую getch () для борьбы с этой проблемой, которая заставляет окно ждать, пока пользователь не нажал другую клавишу. Любой совет по этому вопросу был бы замечательным, потому что я просто не уверен, в чем проблема. Если это что-то простое, пожалуйста, не кастрируйте меня, у меня очень мало опыта работы с premake и статическими библиотеками, поэтому я пытаюсь изучить их.

1 Ответ

11 голосов
/ 25 ноября 2011
links {"Test"}

Луа не Питон.Пробелы не имеют отношения к Lua, так же как пробелы не имеют значения для C ++.Таким образом, ваше заявление links относится только к конфигурации "Release".Если вы хотите, чтобы он применялся к проекту в целом, он должен идти перед оператором configuration, так же, как ваши kind, files и другие команды.

Premake4 работает таким образом,что у вас могут быть определенные библиотеки, которые используются только в "Release" сборке (или отладке, или как угодно).В самом деле, вы можете поместить почти любую project команду в configuration.Таким образом, вы можете иметь определенные файлы, которые используются только в отладочной сборке, или что-то еще.

...