CMake 编译生成的文件

标签 cmake

我有一个在 CMake 构建过程中生成的文件列表。之后我想使用“add_library”编译这些文件,但是在生成之前我不知道生成了哪些文件。无论如何将其构建到 CMake 脚本中?

最佳答案

好吧,我认为这是可能的,所以我将分享我所做的。我的问题是我必须编译几个 CORBA idl 以用作项目源代码的一部分,并且我不想手动列出每个文件。我认为最好找到文件。所以我这样做了:

file(GLOB IDLS "idls/*.idl")
set(ACE_ROOT ${CMAKE_FIND_ROOT_PATH}/ace/ACE-${ACE_VERSION})
foreach(GENERATE_IDL ${IDLS})
   get_filename_component(IDLNAME ${GENERATE_IDL} NAME_WE)
   set(OUT_NAME ${CMAKE_CURRENT_SOURCE_DIR}/idls_out/${IDLNAME})

   list(APPEND IDL_COMPILED_FILES ${OUT_NAME}C.h ${OUT_NAME}C.cpp ${OUT_NAME}S.h ${OUT_NAME}S.cpp)

   add_custom_command(OUTPUT ${OUT_NAME}C.h ${OUT_NAME}C.cpp ${OUT_NAME}S.h ${OUT_NAME}S.cpp
                      COMMAND ${ACE_ROOT}/bin/tao_idl -g ${ACE_ROOT}/bin/ace_gperf -Sci -Ssi -Wb,export_macro=TAO_Export -Wb,export_include=${ACE_ROOT}/include/tao/TAO_Export.h -Wb,pre_include=${ACE_ROOT}/include/ace/pre.h -Wb,post_include=${ACE_ROOT}/include/ace/post.h -I${ACE_ROOT}/include/tao -I${CMAKE_CURRENT_SOURCE_DIR} ${GENERATE_IDL} -o ${CMAKE_CURRENT_SOURCE_DIR}/idls_out/
                      COMMENT "Compiling ${GENERATE_IDL}")
endforeach(GENERATE_IDL)

set_source_files_properties(${IDL_COMPILED_FILES}
                            PROPERTIES GENERATED TRUE)

set(TARGET_NAME ${PROJECT_NAME}${DEBUG_SUFFIX})

add_executable(
   ${TARGET_NAME}
   ${SOURCE} 
   ${IDL_COMPILED_FILES}
)

如果未创建我的 idl 编译输出之一(*C.cpp、*C.h、*S.cpp 和 *S.h),则 GENERATED 属性很有用,因此构建命令不会提示该文件不存在.

关于CMake 编译生成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4222326/

相关文章:

cmake - 将列表转换为 cmake 函数的参数

c++ - QAbstractTableModel继承vtable问题

CMake:安装后如何链接(ln)其他名称?

c++ - 包括来自预建库 Android.mk 的头文件

c++ - CMake 看不到源文件,找不到#includes

linux - 使用 CMake 在库中查找符号

c++ - Qt 带 Cmake : set(QT_USE_QTWEBKIT TRUE) not working

cmake add_custom_command 不起作用

c++ - 链接库 opencv cmake

c++ - 编译 ROS ORB_SLAM2 时 undefined reference