【问题标题】:CMake OBJECT file flags not workingCMake OBJECT 文件标志不起作用
【发布时间】:2015-09-11 19:58:34
【问题描述】:

我正在尝试制作一个简单的 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 标志?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 可以在不同的行中添加标志,但以变量重新定义的形式使用其先前的值:set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -std=c++11)。您在原始代码中所做的是将 全新 值分配给变量。当然,这并没有将所有标志组合在一起。
    猜你喜欢
    • 2017-06-08
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2014-07-12
    • 2019-04-17
    • 2018-11-08
    • 2023-03-26
    相关资源
    最近更新 更多