C-如何将GCC优化水平传递给CMAKE目标



i有一个C项目,该项目使用CMAKE构建每个库类型的三个目标(静态,动态和共享):

add_library(contact-static STATIC EXCLUDE_FROM_ALL lib/contact.c)
add_library(contact-shared SHARED EXCLUDE_FROM_ALL lib/contact.c)
add_executable(contactbook src/main.c)
target_link_libraries(contactbook contact-static)
add_executable(contactbook-static EXCLUDE_FROM_ALL src/main.c)
target_link_libraries(contactbook-static contact-static)
add_dependencies(contactbook-static contact-static)
add_executable(contactbook-shared EXCLUDE_FROM_ALL src/main.c)
add_dependencies(contactbook-shared contact-shared)
target_link_libraries(contactbook-shared contact-shared)
add_executable(contactbook-dynamic EXCLUDE_FROM_ALL src/main.c)
target_link_libraries(contactbook-dynamic contact-shared)
target_compile_definitions(contactbook-dynamic PRIVATE DYNLIB=true)
target_compile_options(contactbook-dynamic PRIVATE -rdynamic)
target_link_libraries(contactbook-dynamic dl)

问题是我必须提供传递给make命令的优化级别。

我已经尝试过(但是在两者中,我都卡住了):

  • 通过像 make -Dopt:STRING=0这样的conman传递变量,但我不知道如何将其用作编译器标志
  • 为每个优化级别创建目标,但我无法将定义添加到add_custom_target目标

那么我该怎么做,将优化级别传递给目标的最佳实践是什么?

在这样的命令行上运行cmake时,您可以更改任何CMAKE变量:

cmake -DCMAKE_CXX_FLAGS="-Os" .

最新更新