CMake OBJECT文件标志不起作用

时间:2015-09-11 19:58:35

标签: c++ c++11 makefile cmake

我正在尝试创建一个简单的cmake文件来为我的项目生成一个makefile。

现在,我必须首先生成一些.o文件,然后编译主脚本。

我使用了一些std 11函数,所以我需要定义那个标志。

我的CMakeList.txt文件如下所示:

cmake_minimum_required(VERSION 2.8)

project(P)

#C++ compiler
set(CMAKE_CXX_COMPILER_INIT g++)

#Compiler flags config

set(CMAKE_CXX_FLAGS "-W")
set(CMAKE_CXX_FLAGS "-Wall")
set(CMAKE_CXX_FLAGS "-I../..")
set(CMAKE_CXX_FLAGS "-lpthread")
set(CMAKE_CXX_FLAGS "-g")
set(CMAKE_CXX_FLAGS "-Iinclude/")
set(CMAKE_CXX_FLAGS "-std=c++11")
set(CMAKE_CXX_FLAGS "-lz")
set(CMAKE_CXX_FLAGS "-lrt")
set(CMAKE_CXX_STANDARD 11)


set_source_files_properties(a.c PROPERTIES LANGUAGE CXX)
add_library(A OBJECT a.h a.c)


set_source_files_properties(b.cpp PROPERTIES LANGUAGE CXX)
add_library(B OBJECT b.h b.cpp)


add_executable(P p.cpp $<TARGET_OBJECTS:A>  $<TARGET_OBJECTS:B>)

现在,当我运行makefile时,编译器给了我一个b.cpp的错误。它说其中一个函数没有定义,我知道那个错误是因为没有用标准编译11

如何在编译目标文件时告诉cmake添加std = c ++ 11标志?

1 个答案:

答案 0 :(得分:0)

我知道出了什么问题。显然你不能在不同的行中添加标志。我应该做的事情如下:

set(CMAKE_CXX_FLAGS“-W -Wall -I ../ .. -lpthread -g -Iinclude -std = c ++ 11 -lz -lrt”)