【问题标题】:Static linking .lib files in cmakecmake中静态链接.lib文件
【发布时间】:2019-03-06 08:01:34
【问题描述】:

我正在尝试使用 IUP 在 Windows 10 中创建 gui 程序。我还使用 Clion+MSVC 作为 IDE。 IUP 有 .lib 和 .dll 文件可供下载,当我没有指定如何在 cmake 中链接时一切顺利;当没有关于链接的自定义标志时,cmake 会自动尝试与 iup.dll 动态链接。

但是,当我尝试将 iup.dll 与编译器标志 /MT 静态链接时,编译器会自动将 /MT 更改为 /MD 并且只是动态链接。

这是我用来强制编译器静态链接的 cmake 代码:

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MT")

然后我收到以下警告:

cl : Command line warning D9025 : overriding '/MT' with '/MD'

有什么方法可以“强制”cmake 和编译器将库静态链接到我的程序?

【问题讨论】:

标签: c cmake clion


【解决方案1】:

Cmake 具有自动设置几乎所有这些标志的命令。

尝试在target_link_libraries之前添加add_library(iup.dll STATIC IMPORTED)

Cmake doc

【讨论】:

    【解决方案2】:

    默认情况下,CMake 在构建静态或共享库时使用 MSVC 动态运行时库 (/MD)。

    您需要将CMAKE_C_FLAGS/CMAKE_CXX_FLAGS 变量中的/MD 设置替换为/MT。 这可以通过以下命令完成:

    string(REGEX REPLACE "/MD" "/MT" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
    string(REGEX REPLACE "/MD" "/MT" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
    

    如需完整解决方案,请参阅following post

    【讨论】:

      【解决方案3】:

      其他选项:

      set_target_properties(TARGET_LIB PROPERTIES
          COMPILE_OPTIONS "$<$<CONFIG:Debug>:/MTd>$<$<CONFIG:Release>:/MT>"
          )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-04
        • 1970-01-01
        • 1970-01-01
        • 2013-01-27
        • 2015-07-20
        • 2017-06-13
        • 1970-01-01
        相关资源
        最近更新 更多