【发布时间】:2017-12-02 18:49:00
【问题描述】:
我已经 been told 直接在 CMake 中设置 CFLAGS 是不好的做法,相反,我应该使用 target_compile_definitions() 命令。
好的,但是 - 如果我想对多个(独立)目标使用相似/相同的定义怎么办?我不想一遍又一遍地重复自己。
【问题讨论】:
-
链接失效(至少现在)。
bad practice to do things like seting CFLAGS directly in CMake- 如果你谈论设置变量CMAKE_CXX_FLAGS,那么这取决于你想要设置什么样的选项。无需完全避免设置变量。 -
@Tsyvarev:添加了视频链接。
-
@einpoklum 用于我们的内部构建系统,我们公司的每个人都使用我们的所有构建系统,我们直接设置
CMAKE_CXX_FLAGS,因此它们对于所有目标都是相同的。在我们的例子中,这是有道理的。如果您想开源您的项目,并让其他人通过 ExternalProject 使用您的 CMakeLists,那么这样做将被视为不好的做法,因为您将构建标志强加给用户。这取决于你的情况 -
@SteveLorimer -
... have others consume your CMakeLists via ExternalProject, then doing so would be considered bad practice- ExternalProject 不会影响项目的CMAKE_CXX_FLAGS。你的意思是add_subdirectory吗? -
@SteveLorimer:实际上,在第二个问题上,请注意,其他人是通过 ExternalProject 使用您的 CMakeLists 还是只是用户构建它并不重要——这仍然是不好的做法,因为如果用户有不同的 C/C++ 编译器具有不同的标志语法,那么你可能会被搞砸。
标签: cmake dry idioms compiler-options