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

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

FreeImage.lib
FreeImage.dll

现在我的问题是双重的:
  • 我想从我的cmake脚本中执行“make”。
  • 我想链接到导入库(FreeImage.lib),并确保将DLL复制到正确的位置,以便EXE可以运行。

  • 我知道如何链接到LIB文件,但是我迷路了。

    文件夹结构如下:
    MyProject                     # main directory
    MyProject/Libs/FreeImage      # FreeImage root directory
    MyProject/Libs/FreeImage/Dist # This is where FreeImage outputs go (LIB and DLL)
    

    顺便说一句:我正在Windows 7上运行。我计划同时使用MSVC和MinGW来构建我的项目。

    谢谢!

    编辑:
    我现在正试图像这样使用ExternalProject_Add:
    ExternalProject_Add(
        FreeImage
        PREFIX ./Libs/FreeImage
        URL ./Libs/FreeImage
        BUILD_COMMAND make
    )
    

    这使我成为其中的一部分,但并不能完全起作用...它尝试为我配置事物并尝试使用nmake ...呃

    最佳答案

    我认为有两种选择:

    如果您已将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中

    关于dll - 在cmake构建中使用外部DLL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5696935/

    10-12 07:05