$(BUILD)/cc_flags: force $(QUIET) mkdir -p $(BUILD) $(QUIET) echo $(CC_FLAGS) | cmp -s - $@ || echo $(CC_FLAGS) > $@
时间: 2024-05-30 22:10:36 浏览: 16
这是一个 Makefile 中的规则,它的作用是检查 $(BUILD)/cc_flags 文件是否存在。如果不存在,则创建该文件,并将 CC_FLAGS 变量的值写入该文件。如果该文件已经存在,且其内容与 CC_FLAGS 变量的值不同,则将 CC_FLAGS 变量的值写入该文件。
其中,CC_FLAGS 是 C/C++ 编译器的参数,用于指定编译选项。该规则的作用是确保在编译过程中使用的 CC_FLAGS 参数与 $(BUILD)/cc_flags 文件中存储的参数值相同。
相关问题
target_compile_options(tutorial_compiler_flags INTERFACE "$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>" "$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>" )这段代码什么意思
这段代码定义了一个 CMake 目标(target),名为 `tutorial_compiler_flags`,类型为 `INTERFACE`。`INTERFACE` 目标不会生成任何构建规则,而是提供一些编译选项和链接选项,供其他目标使用。
该目标使用了 CMake 的生成器表达式,根据不同的编译器类型和平台,提供不同的编译选项。具体来说:
- `$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>` 表示当编译器是 GCC 或者类似于 GCC 的编译器时,使用 `-Wall`、`-Wextra`、`-Wshadow`、`-Wformat=2`、`-Wunused` 这些编译选项。
- `$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>` 表示当编译器是 Visual Studio 或者类似于 Visual Studio 的编译器时,使用 `-W3` 这个编译选项。
这样,其他使用了 `tutorial_compiler_flags` 的目标就可以自动继承这些编译选项了。例如:
```
add_library(mylib mylib.cpp)
target_link_libraries(mylib PRIVATE tutorial_compiler_flags)
```
这里的 `mylib` 目标会自动继承 `tutorial_compiler_flags` 中定义的编译选项。
# Non-SGX files Nsgx_App_Cpp_Files := $(wildcard App/*.cpp) Nsgx_App_Cpp_Files := $(filter-out App/test.cpp App/foo.cpp App/Start.cpp App/App.cpp App/Keys.cpp App/Client.cpp App/Server.cpp, $(Nsgx_App_Cpp_Files)) # Includes SGX files App_Cpp_Files := $(Nsgx_App_Cpp_Files) App/sgx_utils/sgx_utils.cpp App_Include_Paths := -IApp -I$(SGX_SDK)/include $(Salticidae_Include_Paths) App_C_Flags := $(SGX_COMMON_CFLAGS) -fPIC -Wno-attributes $(App_Include_Paths)
这部分代码定义了一些变量和规则,用于编译非SGX相关的文件。
首先,使用`wildcard`函数获取`App`目录下的所有`.cpp`文件,并将结果保存在`Nsgx_App_Cpp_Files`变量中。然后使用`filter-out`函数将特定的文件(`App/test.cpp`, `App/foo.cpp`, `App/Start.cpp`, `App/App.cpp`, `App/Keys.cpp`, `App/Client.cpp`, `App/Server.cpp`)从`Nsgx_App_Cpp_Files`中过滤掉。
接下来,定义了一个包含SGX文件的变量,将之前过滤得到的`Nsgx_App_Cpp_Files`和`App/sgx_utils/sgx_utils.cpp`文件合并在一起。
然后,定义了一个包含头文件路径的变量,包括`App`目录和指定的SGX SDK目录的include路径。
最后,定义了一个包含编译标志的变量,其中包括SGX公共编译标志、-fPIC标志、禁用某些属性的警告标志和之前定义的头文件路径。
这部分代码的作用是为非SGX相关的文件提供编译所需的文件列表和编译标志。