【发布时间】:2015-06-29 15:20:15
【问题描述】:
我正在尝试制作一个静态库,例如my_lib.a。
这个库依赖于一个 gSoap 代码 - file2.cpp.o,这是因为这个 CMake 指令(和 2 个自定义命令)而生成的:
add_library(${TARGET_NAME} ${SRC_FILES}
${GENERATED_SRC_FILES} ${GENERATED_H_FILES} ${GENERATED_RES_FILES})
file2.cpp 存在于GENERATED_SRC_FILES 中。在链接之前一切都运行良好。
/usr/bin/ar cr ../lib/my_lib.a CMakeFiles/my_lib.dir/src/file1.cpp.o CMakeFiles/my_lib.dir/src/file2.cpp.o
如果我让 Make 使用这个命令,库 my_lib.a 将包含
file1.cpp.o 和 file2.cpp.o。但实际上我不需要file2.cpp.o
在我的 *.a 库中。
有谁知道我必须如何管理此案例以获取仅包含 file1.cpp.o 的 my_lib.a?
【问题讨论】:
-
我会写一个从
${GENERATED_SRC_FILES}中删除file2.cpp的宏 -
或者只是列出(REMOVE_ITEM GENERATED_SRC_FILES file2.cpp)
-
感谢您的想法! :) 我在调用 add_library() 之前尝试使用“list(..)”,但它对链接状态没有影响......你说的创建宏是什么意思?当我检查 GENERATED_SRC_FILES 的内容时,它包含 .cpp/.c 文件,但不包含目标文件 *.o。这意味着,对我来说,链接是完全不同的过程......
-
如果您从列表中删除 cpp 文件,则它不会被编译为库的一部分,因此您不必担心 .o 文件。
-
我在 CMake 中看到了什么是宏,我不知道这个功能:) 谢谢你的想法,我会试试的。