在cmake中静态链接.lib文件

时间:2019-03-06 08:01:35

标签: c cmake clion

我正在尝试使用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和编译器将库静态链接到我的程序?

3 个答案:

答案 0 :(得分:0)

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

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

Cmake doc

答案 1 :(得分:0)

By default CMake uses the MSVC dynamic runtime library (/MD) when building static or shared libraries.

You need to replace the /MD setting in the CMAKE_C_FLAGS/CMAKE_CXX_FLAGS variables with /MT. This can be done by the follwoing commands:

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

For a complete solution please see the following post

答案 2 :(得分:0)

另一个选项:

binrg1