如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
How to define a custom build configuration type where a target that is normally a .exe is instead a DLL
我正在使用CMake来生成我的Visual Studio解决方案。现在,CMake 在单个项目下生成两个配置Release
和Debug
。这两个配置都生成 win32 (.exe( 应用程序。
这很好用,但我也想生成第三个配置,它构建一个 DLL。我知道在 CMake 中,我们可以使用add_library(LibraryName SHARED [files])
生成一个单独的项目,该项目创建构建 DLL 目标,但这不是我想要的。相反,我想在Visual Studio中生成一个DLL
配置,以及Debug
和Release
。
我可以通过在 CMakeList 中添加set(CMAKE_CONFIGURATION_TYPES Release Debug DLL)
来获取配置,但我不确定如何实际配置它。如何使此自定义配置实际生成 DLL?如果可能的话,我还想自定义此配置的输出名称和目录,就像我如何使用CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE
等一样。
这可能吗?如果是这样,怎么能做到?
而不是add_library(LibraryName SHARED [files])
您可以保留add_library(LibraryName [files])
而不使用STATIC
或SHARED
,然后您可以使用-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_libraries
和install
( 与_shared
目标。
我经常使用这种方法来一次性构建静态和共享库,用于CMakeLists.txt
不是为这样做而设计的库。
当您以这种方式添加单独的目标时,您还应该能够为其指定单独的输出名称和目录。
- 在 ******.exe 中0x00000000772CA267 (ntdll.dll) 处未处理的异常:0xC0000
- 解析引用 |exe/dll vs lib
- 如何定义自定义生成配置类型,其中通常是.exe的目标改为 DLL
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- C++ DLL 引用C++.exe中的函数和类
- 从 exe 和 dll 访问静态库中的 extern 变量
- 如何链接 DLL 以供 LoadLibrary() 使用(在 Windows 上的 C++ 中)并从调用 exe 导入变
- C++ |DLL / EXE - 如何从导出的类调用另一个类方法?
- 在 EXE/DLL 之间传递数据
- 为什么我可以在EXE上编译DLL
- .EXE是否可以使用间接导入的 DLL 中的符号?
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- GetModuleHandle() 无法检索由 "notepad.exe" 加载的"advapi32.dll"的句柄
- 如何将我的程序转换为.dll文件并使用rundll32.exe在cmd中运行它?
- x64 位的 C++/CLI DLL 和 Exe 的应用崩溃
- 如何在 windowsservercore Docker 映像上安装执行本机C++ DLL/EXE 所需的所有依赖二进制
- 用户DLL/EXE中的堆分配失败
- 我可以将使用v120_xp工具集构建的静态库链接到使用VS2013中的v120工具集创建的EXE/DLL中吗
- 用于检查配置类型(exe/dll)的宏
- C++ 一个解决方案两个项目(EXE & DLL)链接错误