我尝试用这段代码来链接*.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”*.obj
cmake 中的文件?
我假设您必须将 *.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(使用前将#替换为@)