如何在cmake中将预构建的目标文件添加到可执行文件中

mkm*_*afa 17 cmake

我有一个add_custom_target触发项目的make(该项目不使用cmake!)并生成一个目标文件.我想将此对象文件添加到项目的cmake中的可执行目标.有没有办法做到这一点?

mkm*_*afa 12

SET(OBJS
  ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o
)

ADD_EXECUTABLE(myProgram ${OBJS} <other-sources>)

SET_SOURCE_FILES_PROPERTIES(
  ${OBJS}
  PROPERTIES
  EXTERNAL_OBJECT true
  GENERATED true
)
Run Code Online (Sandbox Code Playgroud)

这对我有用.显然必须设置这两个属性,EXTERNAL_OBJECTGENERATED.

  • 代码片段缺少`add_executable()`调用,对象文件作为其参数之一.它让一些读者感到困惑,比如这个:/sf/ask/3374682601/. (5认同)

Flo*_*ian 9

我在我的项目中完成了这个target_link_libraries():

target_link_libraries(
    myProgram 
    ${CMAKE_CURRENT_SOURCE_DIR}/libs/obj.o
)
Run Code Online (Sandbox Code Playgroud)

target_link_libraries()假定给定的任何完整路径都是要转发到链接器的文件.


对于CMake版本> = 3.9,add_library(... OBJECT IMPORTED ..)您可以使用目标.

请参阅Cmake:使用导入的对象


而且 - 请参阅@arrowd的答案 - 有未记录的方法将它们直接添加到目标的源文件列表中(实际上意味着支持add_custom_command()构建步骤的目标文件输出,就像你的情况一样).