相关疑难解决方法(0)

如何在CMake中输出生成器表达式的结果?

我有以下简单的CMake代码:

cmake_minimum_required(VERSION 3.1)

project(PrintGenerators)

set(TEST_OR_GENERATOR "$<$<OR:0,0,1>:YAY!>")

message(STATUS ${TEST_OR_GENERATOR}) # Print out the result of the build
Run Code Online (Sandbox Code Playgroud)

我希望这段代码可以打印出来YAY!,但事实并非如此.我改为$<$<OR:0,0,1>:YAY!>输出.如何在配置期间打印评估的生成器表达式的结果?

cmake

8
推荐指数
3
解决办法
2892
查看次数

CMake的对象输出文件夹变量

如何"$ {PROJECT_BINARY_DIR} /CMakeFiles/project.dir/",编译产生的地方对象文件将被放置,可以是非硬编码的吗?

直接针对这个问题,我们有一些测试检查对象是由harfbuzz cmake上的编译产生的,我们在那里使用了一个硬编码的字符串,但这似乎不对,我希望有一些$ {}或$ <>.

cmake

6
推荐指数
1
解决办法
1227
查看次数

如何在 CMake 3.7 中表达 PGO 依赖项?

我有一个 C++ 程序,我正在使用 Clang 3.9 的配置文件引导优化功能构建它。这是应该发生的事情:

  1. 我在启用检测的情况下构建程序。
  2. 我运行那个程序,用 profile-data: 创建一个文件prof.raw
  3. llvm-profdata用来转换prof.raw为一个新文件,prof.data.
  4. 我创建了同一程序的新版本,并进行了一些更改:
    • 将每个 .cpp 文件编译为 .o 文件时,我使用编译器标志-fprofile-use=prof.data
    • 链接可执行文件时,我还指定了-fprofile-use.

为此,我有一个 Gnu Makefile,效果很好。我的问题出现了,因为我试图将该 Makefile 移植到 CMake(3.7,但我可以升级)。我需要使用(至少)Unix Makefiles 生成器的解决方案,但理想情况下它适用于所有生成器。

在 CMake 中,我定义了两个可执行目标:foo-genfoo-use

  • foo-gen被执行时,它创建的prof.raw文件。
  • add_custom_command用来创建一个规则来创建prof.dataprof.raw.

我的问题是我不知道如何告诉 CMake 依赖的每个目标文件foo-use都依赖于文件prof.data.

  • 我最有希望的想法是 (1) 找到一种方法来枚举所有.o依赖的文件foo-use,然后 (2) 遍历每个.o文件,调用add_dependency每个文件。

    这种方法的问题是我在我的 CMakeLists.txt …

c++ cmake clang pgo

5
推荐指数
1
解决办法
729
查看次数

标签 统计

cmake ×3

c++ ×1

clang ×1

pgo ×1