【发布时间】:2016-12-30 17:57:17
【问题描述】:
我有这个简单的 CMake 文件
cmake_minimum_required(VERSION 2.8)
project(test)
set(SOURCES source.cpp)
add_executable(test ${SOURCES})
其中 source.cpp 是一个简单的 hello world 程序。然后我生成 Visual Studio 项目
cmake -G"Visual Studio 14 2015" ..\Sources
生成的 Visual Studio 项目在Configuration Properties > Linker > Input > Additional Dependencies 下有以下库:
kernel32.lib
user32.lib
gdi32.lib
winspool.lib
shell32.lib
ole32.lib
oleaut32.lib
uuid.lib
comdlg32.lib
advapi32.lib
如果我删除这些库,我仍然可以成功构建和运行 hello world。
为什么 CMake 会添加所有这些库,我该怎么做才能在我的项目中不包含它们?
【问题讨论】:
-
这些都是标准的 Windows 操作系统库(连接到 Windows 内核、用户和 GDI DLL)。任何除了将 Hello, world 写入控制台之外的任何 Windows 应用程序都需要它们中的许多(大部分)。
-
@KenWhite 好的,但是如果需要它们,为什么我仍然可以在不链接它们的情况下运行我的项目?
-
因为你正在编写一个简单的 Hello world 应用程序,大概。
-
似乎有一个 CMAKE_STANDARD_LIBRARIES 变量。您可以修改它以仅链接到您喜欢的库。
-
@Vertexwahn 是的,你是对的。但是
CMAKE_STANDARD_LIBRARIES似乎是空的。我可以更改的变量是CMAKE_CXX_STANDARD_LIBRARIES和CMAKE_C_STANDARD_LIBRARIES。如果您将评论更改为答案,我会接受。
标签: visual-studio cmake