我想使用一组全局标志来编译项目,这意味着在我指定的顶级CMakeLists.txt文件中:
ADD_DEFINITIONS ( -Wall -Weffc++ -pedantic -std=c++0x )
Run Code Online (Sandbox Code Playgroud)
但是,对于一个子目录中的特定文件(假设为"foo.cpp"),我想将编译标志切换为不应用-Weffc ++(包含的商业库我无法更改).为了简化只使用-Wall的情况,我试过:
SET_SOURCE_FILES_PROPERTIES( foo.cpp PROPERTIES COMPILE_FLAGS -Wall )
ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)
,这没用.我也试过了
SET_PROPERTY( SOURCE foo.cpp PROPERTY COMPILE_FLAGS -Wall )
ADD_EXECUTABLE( foo foo.cpp )
Run Code Online (Sandbox Code Playgroud)
和
ADD_EXECUTABLE( foo foo.cpp )
SET_TARGET_PROPERTIES( foo PROPERTIES COMPILE_FLAGS -Wall )
Run Code Online (Sandbox Code Playgroud)
,其中既没有奏效.
最后,我尝试删除这个定义:
REMOVE_DEFINITIONS( -Weffc++ )
ADD_EXECUTABLE( foo foo.cpp )
ADD_DEFINITIONS( -Weffc++ )
Run Code Online (Sandbox Code Playgroud)
,这也没有用(意思是,我得到了很多关于商业图书馆的风格警告).(**注意:如果在构建可执行文件后不重新包含-Weffc ++指令,则会禁止警告.)
我也试过暂时删除编译标志:http: //www.cmake.org/pipermail/cmake/2007-June/014614.html ,但这没有帮助.
对此没有优雅的解决方案吗?
我有一个CMake项目,通过\MP标志支持Visual Studio中的多处理器编译.
因为在项目构建的许多可执行文件中只有一个,我需要将\MP标志设置为false(或禁用它,因为我导入.tlb文件时出错),如何设置此目标的标志不同?
add_executable(MyProgram myprogram.cpp)
target_link_libraries(MyProgram MyLibraries)
Run Code Online (Sandbox Code Playgroud)
我应该给set_target_propertiescmake或者从整个项目中删除标志吗?谢谢!
在其他地方有人问过这样的问题:“如何关闭一个文件的优化?” 答案通常是这样的:
cmake_minimum_required( VERSION 3.8 )
project( Hello )
add_executable( hello hello.c foo.c bar.c )
set( CMAKE_C_FLAGS_RELEASE "" )
set( CMAKE_CXX_FLAGS_RELEASE "" )
set_source_files_properties( hello.c
PROPERTIES
COMPILE_FLAGS -O0 )
Run Code Online (Sandbox Code Playgroud)
除非您像这样调用 cmake,否则这将有效:
cmake -GNinja -DCMAKE_BUILD_TYPE=Release ../hello
Run Code Online (Sandbox Code Playgroud)
你在你的build.ninja
FLAGS = -O3 -DNDEBUG -O0
Run Code Online (Sandbox Code Playgroud)
编译此源文件时要添加的其他标志。
这是有道理的,它被添加到 COMPILE_FLAGS 列表中,它不会覆盖现有的编译器标志。
那么,在 CMake 中如何覆盖单个文件的优化级别并能够编译项目的其余部分Release?否则,您可以强制编译为CMAKE_BUILD_TYPE=""默认行为,但这在某种程度上违背了 Cmake 的卖点。
我的项目中有依赖项作为源,我无法控制.我正在使用cmake的clang-tidy集成来分析我的代码,而这种依赖性正在发出很多警告.有没有办法告诉cmake不要在特定文件上运行clang-tidy?
我试图将文件添加到-line-filterclang-tidy选项中,但这不起作用:
set_target_properties(target PROPERTIES
CXX_CLANG_TIDY "${clang_tidy_loc};\
${TIDY_CONFIG} \
-line-filter=\"[\
{\"name\":\"path/to/file.cpp\"},\
{\"name\":\"path/to/file.h\"}\
]\"")
Run Code Online (Sandbox Code Playgroud)
如果解决方案可以与其他静态分析器(如cppcheck)一起使用,那将非常好.谢谢.