在cmake构建中使用外部DLL

时间:2011-04-17 22:36:43

标签: dll cmake freeimage

我正在为我的项目制作cmake脚本,但我遇到了一个问题:

我的项目使用第三方库(FreeImage),它有自己的基于Makefile的构建系统。我可以通过简单地运行“make”(我正在使用gnuwin32)来构建FreeImage,它将使用MinGW构建FreeImage并生成:

FreeImage.lib
FreeImage.dll

现在我的问题有两个:

  1. 我想从我的cmake脚本中执行“make”。
  2. 我想链接到导入lib(FreeImage.lib),并确保将DLL复制到正确的位置,以便EXE运行。
  3. 我知道如何链接到LIB文件,但我在其余部分丢失了。

    文件夹结构如下:

    MyProject                     # main directory
    MyProject/Libs/FreeImage      # FreeImage root directory
    MyProject/Libs/FreeImage/Dist # This is where FreeImage outputs go (LIB and DLL)
    

    BTW:我在Windows 7上运行。我打算用MSVC和MinGW构建我的项目。

    谢谢!

    编辑: 我现在正试图像这样使用ExternalProject_Add:

    ExternalProject_Add(
        FreeImage
        PREFIX ./Libs/FreeImage
        URL ./Libs/FreeImage
        BUILD_COMMAND make
    )
    

    这让我成为了那里的一部分,但并没有完全奏效...它试图为我配置并试图使用nmake ...呃

1 个答案:

答案 0 :(得分:2)

在我看来,有两种选择:

如果您将FreeImage源放在项目的源树中,最简单的选择可能是使用execute_process()命令。假设FreeImage在您的项目的“3rdparty / FreeImage /”中的源代码树中,您可以执行类似的操作,

execute_process( COMMAND make WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/3rdParty/FreeImage )

或者,您可以将dll从3rdParty / FreeImage / bin复制到您自己的bin目录中。然后你可以编写一个FreeImageConfig.cmake来导入库:

add_library(FreeImage IMPORTED) set_target_properties(FreeImage PROPERTIES IMPORTED_LOCATION $ {PROJECT_SOURCE_DIR} / 3rdParty / FreeImage / lib) ...

另一种选择是使用ExternalProject模块。您还可以查看Kitware中的this article以获取该模块的概述。实质上,您指定了获取源,配置构建,构建源和安装源所需的完整命令链。全部在你自己的CMakeLists.txt