Search code examples
premake

Problems with libraries in premake


I have experienced certain problems when using libraries in premake4 scripts.

1) When creating a shared library (.dll) on Windows 10 using a premake4 script, it creates the dll fine, but it also creates a static library of small size (2K).

In my case, I was creating a shared library named MathLib.dll using a premake4 script. It did that correctly, but it also created a file named libMathLib.a of size 2K. (It may be empty.)

I don't see why there was a need for the Makefile generated by premake4 to create libMathLib.a, when in fact the objective was to create a .dll file. I think this may be a premake4 bug and I have raised it on the premake4 Issue tracker on github.

The premake4 lua script is as follows:

-- Dir : Files > C > SW > Applications > Samples >
--      premakeSamples > premake-sharedlib-create

--#!lua

-- A solution contains projects,
-- and defines the available configurations
solution "MathLib"
   configurations { "Debug", "Release" }

   -- A project defines one build target
   project "MathLib"
      kind "SharedLib"
      language "C++"
      files { "**.h", "**.cpp" }
      includedirs {"../../../ProgramLibraries/Headers/"}
      -- Create target library in Files > C > SW > 
      -- Applications > ProgramLibraries
      targetdir "../../../ProgramLibraries/"

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

      configuration "Release"
         defines { "NDEBUG" }
         flags { "Optimize" }


-- Register the "runmakefile" action.
newaction
{
   trigger = "runmakefile",
   description = "run the generated makefile to create the executable using the default ('debug' config)",
   execute = function()
     os.execute("make")
   end
}


-- Register the "runmakefilerelease" action.
newaction
{
   trigger = "runmakefilerelease",
   description = "run the generated makefile to create the executable using the 'release' config)",
   execute = function()
     os.execute("make config=release")
   end
}


2) The above problem is more serious than it sounds. Supposing I had already created a genuine static library named libMathLib.a in the Libraries dir, using a separate premake4 script. Subsequently, if I also create a shared library named MathLib.dll in the same directory as the static library, a dummy static library (possibly empty) would be created and replace the earlier genuine static library.


3) -- EDIT -- : I had reported this point (use of a static library) as a problem, but it has started working now. I don't know the reason, but the only difference, as far as I am aware, is that I had shut down and restarted my PC (and therefore my MSYS session on Windows 10). Therefore I am deleting this point.


How can I solve the above 2 problems?


Solution

  • That's the import library. You can turn it off with Premake's NoImportLib flag.

    flags { "NoImportLib" }