如何使用 cmake 将 .obj 文件添加到依赖项中?

2024-01-01

我尝试用这段代码来链接*.lib文件和*.obj文件到我的依赖项。

SET(EXT_LIBS iphlpapi.lib json_writer.obj json_value.obj)

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SUFFIX "/link .obj")
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${EXT_LIBS} )

该代码仅适用于*.lib文件。 而对于*.obj归档它".lib"会自动附加。 因此,

iphlpapi.lib 
json_writer.obj.lib
json_value.obj.lib

但我想要的结果是

iphlpapi.lib 
json_writer.obj    
json_value.obj

如何在链接时禁用自动附加“.lib”*.objcmake 中的文件?


我假设您必须将 *.obj 文件添加到库/可执行文件的源中。类似的东西

    add_executable(${PROJECT_NAME} 
        c:/full/path/to/windows/object/file.obj
        /full/path/to/linux/object/file.obj
    )

或者你可以写一个FindXXX.cmake https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/How-To-Find-Libraries#writing-find-modules搜索您的目标文件。这些应该创建导入的目标并使用导入的目标的位置属性作为源文件列表add_xxxx() call.

第三个选项还使这些目标文件可通过子项目使用进口目标 https://cmake.org/cmake/help/latest/command/add_library.html#id3.

在不创建额外 Findmodule 的情况下添加目标的示例。 (最好在根 CMakeLists.txt 中)


    add_library(JSONObjects::json_writer OBJECT IMPORTED)
    set_target_properties(JSONObjects::json_writer PROPERTIES IMPORTED_OBJECTS
        /absolute/path/to/linux/json_writer.obj
    )

然后在使用的 CMakeLists.txt 中

    set(ALL_FILES ${ALL_FILES}
        $<TARGET_OBJECTS:JSONObjects::json_writer>
    )
    add_executable(${PROJECT_NAME} ${ALL_FILES})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 cmake 将 .obj 文件添加到依赖项中? 的相关文章

随机推荐