如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL

How to define a custom build configuration type where a target that is normally a .exe is instead a DLL

本文关键字:exe DLL 目标 定义 何定义 自定义 置类型 配置      更新时间:2023-10-16

我正在使用CMake来生成我的Visual Studio解决方案。现在,CMake 在单个项目下生成两个配置ReleaseDebug。这两个配置都生成 win32 (.exe( 应用程序。

这很好用,但我也想生成第三个配置,它构建一个 DLL。我知道在 CMake 中,我们可以使用add_library(LibraryName SHARED [files])生成一个单独的项目,该项目创建构建 DLL 目标,但这不是我想要的。相反,我想在Visual Studio中生成一个DLL配置,以及DebugRelease

我可以通过在 CMakeList 中添加set(CMAKE_CONFIGURATION_TYPES Release Debug DLL)来获取配置,但我不确定如何实际配置它。如何使此自定义配置实际生成 DLL?如果可能的话,我还想自定义此配置的输出名称和目录,就像我如何使用CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE等一样。

这可能吗?如果是这样,怎么能做到?

而不是add_library(LibraryName SHARED [files])您可以保留add_library(LibraryName [files])而不使用STATICSHARED,然后您可以使用-DBUILD_SHARED_LIBS:BOOL=OFF-DBUILD_SHARED_LIBS:BOOL=ON运行CMake来分别构建静态库或共享库。

但这需要您运行 CMake 两次并编译两次。

要同时构建静态和共享,您可以在CMakeLists.txt中替换它:

add_library(LibraryName [files])

跟:

add_library(LibraryName STATIC [files])
add_library(LibraryName_shared SHARED [files])
set_target_properties(LibraryName_shared PROPERTIES OUTPUT_NAME LibraryName)

您可能还必须复制其他行(例如target_link_librariesinstall( 与_shared目标。

我经常使用这种方法来一次性构建静态和共享库,用于CMakeLists.txt不是为这样做而设计的库。

当您以这种方式添加单独的目标时,您还应该能够为其指定单独的输出名称和目录。