我尝试使用此代码将*.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”?
答案 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})