我正在尝试使用generate_export_header函数。我的库源代码位于src
文件夹中,因此CMake会在src/mylib_export.h
生成导出标头。为了使用这个导出标题,我只是将它复制到我的库的include
文件夹中以在实现代码中使用吗?这是我正在使用的CMake代码的片段:
ADD_LIBRARY(${PROJECT_NAME} ${LIB_TYPE} ${SOURCES})
GENERATE_EXPORT_HEADER(${PROJECT_NAME})
FILE(COPY
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_export.h
DESTINATION
${PROJECT_SOURCE_DIR}/include
)
是否有更多的CMake方法可以做到这一点?
答案 0 :(得分:2)
当我使用CMake执行此操作时,我通常会将二进制文件夹添加到include_directories,并且根本不复制导出标头。
这样源代码树中没有任何生成的部分,这使得它更容易与源代码控制一起使用,而且我通常构建我的项目,每个源代码树有超过1个构建树,主要是为了允许在超过1的情况下构建使用不同的设置编译或构建或使用相同的编译器分离32位/ 64位构建树。
答案 1 :(得分:0)
我更喜欢将 export.h
复制到源文件夹并将其添加到 .gitignore
,对于特定于应用程序的 config.h
也是如此。
generate_export_header (
...
EXPORT_FILE_NAME "${CMAKE_CURRENT_SOURCE_DIR}/export.h"
)
configure_file ("config.h.in" "${CMAKE_CURRENT_SOURCE_DIR}/config.h")
原因是 clang
代码突出显示和格式设置。 export.h
和 config.h
现在看起来如何(这些文件将在构建之前更新)无关紧要,您只需要在带有空 build
文件夹的文本编辑器中正确突出显示和格式化您的代码.