我有一个C ++程序,我使用Clang 3.9的配置文件引导优化功能构建。以下是应该发生的事情:
prof.raw
。llvm-profdata
将prof.raw
转换为新文件prof.data
。-fprofile-use=prof.data
。-fprofile-use
。我有一个Gnu Makefile,它很好用。我的问题出现了,我试图将Makefile移植到CMake(3.7,但我可以升级)。我需要解决方案(至少)使用Unix Makefiles生成器,但理想情况下它适用于所有生成器。
在CMake中,我定义了两个可执行目标:foo-gen
和foo-use
:
foo-gen
时,会创建prof.raw
文件。add_custom_command
创建规则以从prof.data
创建prof.raw
。 我的问题是我无法弄清楚如何告诉CMake foo-use
所依赖的每个目标文件都依赖于文件{{1} }。
我最有希望的想法是(1)找到一种方法来枚举prof.data
依赖的所有.o
个文件,然后(2)迭代每个文件那些foo-use
个文件,每个文件都调用add_dependency
。
这种方法的问题是我无法在我的CMakeLists.txt文件中找到一种惯用的方法来枚举可执行文件所依赖的目标文件列表。这可能是be an open problem with CMake。
我还考虑使用set_source_files_properties
在.o
使用的每个.cpp
文件上设置OBJECT_DEPENDS
属性,并将foo-use
添加到prof.data
财产清单。
此问题(AFAICT)是我的每个.cpp
文件都用于创建两个不同的.o
文件:一个用于foo-gen
,另一个用于foo-use
。我希望链接到.o
的{{1}}文件在foo-use
上具有编译时依赖性;但链接到prof.data
的{{1}}文件必须不对.o
具有编译时依赖性。
AFAIK,foo-gen
并不允许我将prof.data
属性设置为具有两个值之一,具体取决于set_source_files_properties
或OBJECT_DEPENDS
是否为当前感兴趣的目标。
有任何关于干净(ish)方法的建议吗?