2

我正在使用 CMake 为 MSVC 构建一个项目。

我所拥有的只是一个 .def 文件,其中包含从 dll 库中导出的函数。我的项目无权访问 dll 或源代码。而且我需要一个导入库来消除未解决的外部问题。我正在为其构建项目的 SDK 仅使用头文件和导入库。但是有些库没有构建,所以我必须在没有源代码或 DLL 库的情况下单独构建它们(它们与产品一起打包,而不是 SDK)。

我可以使用以下命令构建导入库,我将其用作 VS 项目中的预链接事件:

lib /def:<def path> /OUT:<lib name> /MACHINE:<machine type>

CMake也有办法吗?我试过像这样的命令:

add_library(Ilib STATIC empty.cpp expfile.def)
add_library(Ilib SHARED empty.cpp expfile.def)
add_library(Ilib STATIC expfile.def)
set_target_properties(Ilib PROPERTIES LINKER_LANGUAGE CXX)

但他们都没有工作。

我认为,唯一的解决方案是创建一个execute_processoradd_custom_command命令。

4

1 回答 1

0

当我昨晚搜索这个帖子时,这个帖子是最热门的搜索结果,我找不到任何有用的东西。如果它对某人有用(或将来我再次寻找它),这就是我最终得到的结果:

(假设 def 文件在 CMakeLists.txt 旁边)

project(msvcrt)

add_custom_command(
  OUTPUT msvcrt.lib
  COMMAND lib.exe /machine:X64 /def:${CMAKE_CURRENT_SOURCE_DIR}/msvcrt.def /out:msvcrt.lib
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/msvcrt.def
  VERBATIM)

add_custom_target(msvcrtlib ALL
    DEPENDS msvcrt.lib
    VERBATIM)

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/msvcrt.lib DESTINATION foobar)
于 2022-02-15T23:41:53.720 回答