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

时间:2019-06-17 06:39:25

标签: cmake

我尝试使用此代码将*.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

当我在cmake中链接*.obj文件时如何禁用自动附加“ .lib”?

1 个答案:

答案 0 :(得分:0)

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

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

或者,您可以write a FindXXX.cmake搜索目标文件。这些应该创建导入的目标,并在add_xxxx()调用中将导入的目标的location属性用于源文件列表。

第三个选项还通过imported Target使这些目标文件可用于子项目。

不添加额外的Find模块而添加目标的示例。 (最好在根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})