9

私は現在、OpenGLsdkに適用するためにpremake4を使用する方法を学ぼうとしています。私は現在、2つのプロジェクトを構築するVisual Studio 2010ソリューションを作成しようとしています。一方は静的ライブラリであり、もう一方はmainメソッドを使用して単一のメインソースファイルを含みます。

このプロジェクトは非常にシンプルで、プレメイクを学ぶことだけを目的としています。Testという名前の静的ライブラリプロジェクトには、Test.hとTest.cppの2つのファイルがあります。Test.hには、メソッドprint()のプロトタイプが含まれています。print()は、コンソールに1行を出力するだけです。premakeを使用して、静的ライブラリをMainプロジェクトにリンクし、main.cppにTest.hファイルを含めました。私の問題はこれです:VS2010では、ビルドしようとすると次のエラーが発生します:

1> main.obj:エラーLNK2019:関数_mainで参照される未解決の外部シンボル "void __cdecl print(void)"(?print @@ YAXXZ)  
1>。\Main.exe:致命的なエラーLNK1120:1つの未解決の外部

これが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()を使用してその問題に対処します。これにより、ユーザーが別のキーを押すまでウィンドウが強制的に待機します。 。問題が何であるかわからないので、この問題に関するアドバイスは素晴らしいでしょう。単純なものである場合は、去勢しないでください。プリメイクライブラリと静的ライブラリの経験がほとんどないため、それらを学習しようとしています。

4

1 に答える 1

13
links {"Test"}

LuaはPythonではありません。ホワイトスペースはC++にとって重要ではないのと同じように、ホワイトスペースはLuaとは無関係です。したがって、linksステートメントは構成にのみ適用され"Release"ます。プロジェクト全体に適用する場合は、、、、およびその他のコマンドと同様に、configurationステートメントの前に配置する必要があります。kindfiles

Premake4はこのように機能するため、"Release"ビルド(またはデバッグなど)でのみ使用される特定のライブラリを使用できます。実際、ほとんどすべての projectコマンドを。の下に置くことができますconfiguration。したがって、デバッグビルドなどでのみ使用される特定のファイルを作成できます。

于 2011-11-25T18:14:28.573 に答える