相关疑难解决方法(0)

覆盖单个文件的编译标志

我想使用一组全局标志来编译项目,这意味着在我指定的顶级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 ,但这没有帮助.

对此没有优雅的解决方案吗?

c++ cmake compiler-warnings

95
推荐指数
2
解决办法
6万
查看次数

如何在CMake中只更改一个可执行文件的编译器标志?

我有一个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或者从整个项目中删除标志吗?谢谢!

c++ compiler-construction cmake visual-studio-2010

11
推荐指数
1
解决办法
7914
查看次数

CMake 每个文件优化

在其他地方有人问过这样的问题:“如何关闭一个文件的优化?” 答案通常是这样的:

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的文档

编译此源文件时要添加的其他标志。

这是有道理的,它被添加到 COMPILE_FLAGS 列表中,它不会覆盖现有的编译器标志。

那么,在 CMake 中如何覆盖单个文件的优化级别并能够编译项目的其余部分Release?否则,您可以强制编译为CMAKE_BUILD_TYPE=""默认行为,但这在某种程度上违背了 Cmake 的卖点。

cmake

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

clang-tidy 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)一起使用,那将非常好.谢谢.

static-analysis cmake cppcheck clang-tidy

3
推荐指数
1
解决办法
2556
查看次数