如何将 cmake 构建配置用于 运行 llvm libclang 工具,该工具不是我整个代码库的插件?
How to use cmake build config to run llvm libclang tool that is not a plugin over my whole code base?
我已经编写了一个 llvm 插件并制作了一个 cmake 对象库,该库 运行 将插件覆盖在每个源文件上,但我需要从整个编译中获取数据,而插件是 运行 再次为每个编译单元。
但是,我的构建环境相当复杂,我不想只为 运行 使用此工具管理配置的第二个表示形式。
我如何使用我现有的 CMakeLists.txt 发送类似 #define 的东西,并包含一个工具的路径,该工具可以 运行 在我的整个代码库中 [=24] =]?
我考虑过尝试在插件上使用 Coliru 的 unity build,因为它将是一个单一的编译单元,但希望在 cmake 中内置一些东西(可能与一些命令行工具结合使用)可以得到我需要的信息。我也可以做一个多通道 运行,我在其中构建一堆数据文件,然后制作一个不同的工具来组合这些文件,但这也不理想。
谢谢。
我最终使用了 cotire 模块 (https://github.com/sakra/cotire) 并配置了它的统一构建功能(它将所有源代码捆绑到一个文件中进行编译)并 运行 超过了它。
虽然 unity 构建不是与 c++ 100% 兼容,因为它们打破了文件级边界,但它对我有用。
设置它有点棘手,我不确定我做的最好,但我所做的是将以下内容放在子目录中,然后将 add_subdirectory(my_directory_name)
放在我的主 CMakeLists.txt 文件:
MACRO(ADD_CXX_FLAGS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARGN}")
# MESSAGE(${CMAKE_CXX_FLAGS})
ENDMACRO(ADD_CXX_FLAGS)
# target_compile_options is the "better" way to do this but it dedupes flags,
# so the multiple -Xclang flags after the first one get lost. There is a cmake bug on this but no one
# is working on it at this time
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(-load)
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(my_plugin.dylib) <== substitute yours here
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(-plugin)
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(MyPluginRegisteredName) <== substitute yours here
#
add_library(apb-js-api-template OBJECT ${APB_SOURCE_FILES})
set_target_properties(some-project-name-template PROPERTIES COTIRE_UNITY_TARGET_NAME "some-project-name")
cotire(some-project-name-template)
我已经编写了一个 llvm 插件并制作了一个 cmake 对象库,该库 运行 将插件覆盖在每个源文件上,但我需要从整个编译中获取数据,而插件是 运行 再次为每个编译单元。
但是,我的构建环境相当复杂,我不想只为 运行 使用此工具管理配置的第二个表示形式。
我如何使用我现有的 CMakeLists.txt 发送类似 #define 的东西,并包含一个工具的路径,该工具可以 运行 在我的整个代码库中 [=24] =]?
我考虑过尝试在插件上使用 Coliru 的 unity build,因为它将是一个单一的编译单元,但希望在 cmake 中内置一些东西(可能与一些命令行工具结合使用)可以得到我需要的信息。我也可以做一个多通道 运行,我在其中构建一堆数据文件,然后制作一个不同的工具来组合这些文件,但这也不理想。
谢谢。
我最终使用了 cotire 模块 (https://github.com/sakra/cotire) 并配置了它的统一构建功能(它将所有源代码捆绑到一个文件中进行编译)并 运行 超过了它。
虽然 unity 构建不是与 c++ 100% 兼容,因为它们打破了文件级边界,但它对我有用。
设置它有点棘手,我不确定我做的最好,但我所做的是将以下内容放在子目录中,然后将 add_subdirectory(my_directory_name)
放在我的主 CMakeLists.txt 文件:
MACRO(ADD_CXX_FLAGS)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ARGN}")
# MESSAGE(${CMAKE_CXX_FLAGS})
ENDMACRO(ADD_CXX_FLAGS)
# target_compile_options is the "better" way to do this but it dedupes flags,
# so the multiple -Xclang flags after the first one get lost. There is a cmake bug on this but no one
# is working on it at this time
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(-load)
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(my_plugin.dylib) <== substitute yours here
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(-plugin)
ADD_CXX_FLAGS(-Xclang)
ADD_CXX_FLAGS(MyPluginRegisteredName) <== substitute yours here
#
add_library(apb-js-api-template OBJECT ${APB_SOURCE_FILES})
set_target_properties(some-project-name-template PROPERTIES COTIRE_UNITY_TARGET_NAME "some-project-name")
cotire(some-project-name-template)