C++言語のバージョンをC++ 11に変更しようとしていますが、このフラグが有効にならないようです。ここでg ++ -std = C++ 11、フラグが無効になる
は私のメイクファイルからの抜粋です:
#Path Definitions
PATHT = test/
PATHI = inc/
PATHB = build/
PATHS = src/
#Files of interest
CODER_C = $(PATHS)E8b9b.cpp
CODER_O = $(PATHB)E8b9b.o
CODER_H = $(PATHI)E8b9b.hpp
CODER_C_T = $(PATHT)Test_E8b9b_encoder.cpp
CODER_O_T = $(PATHB)Test_E8b9b_encoder.o
TRAN_C = $(PATHS)TransactionID.cpp
TRAN_O = $(PATHB)TransactionID.o
TRAN_H = $(PATHI)TransactionID.hpp
TRAN_C_T = $(PATHT)Test_TransactionID.cpp
TRAN_O_T = $(PATHB)Test_TransactionID.o
SIGV_C = $(PATHS)SigView.cpp
SIGV_O = $(PATHB)SigView.o
SIGV_H = $(PATHI)SigView.hpp
SIGV_C_T = $(PATHT)Test_SigView.cpp
SIGV_O_T = $(PATHB)Test_SigView.o
TESOUT = $(PATHB)Test.out
RUNOUT = $(PATHB)Run.out
#Libraries of interest
BOOSTL = -lboost_unit_test_framework
INCH = -Iinc
#Tool Definitions
CC=g++
FLAGS = -std=c++11 -Wall
test: $(CODER_O_T) $(CODER_O) $(TRAN_O_T) $(TRAN_O) $(SIGV_O_T) $(SIGV_O)
g++ $(FLAGS) $(CODER_O_T) $(CODER_O) $(TRAN_O_T) $(TRAN_O) $(SIGV_O_T) $(SIGV_O) $(BOOSTL) \
-o $(TESOUT) 2> buildLog.txt
./$(TESOUT) 1> buildLog.txt
$(CODER_O_T): $(CODER_C_T) $(CODER_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
$(CODER_O): $(CODER_C) $(CODER_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
$(TRAN_O_T): $(TRAN_C_T) $(TRAN_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
$(TRAN_O): $(TRAN_C) $(TRAN_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
$(SIGV_O_T): $(SIGV_C_T) $(SIGV_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
$(SIGV_O): $(SIGV_C) $(SIGV_H)
g++ $(FLAGS) $(INCH) -c $< -o [email protected] 2> buildLog.txt
私は、次のユニットテストで方言をチェックしています:
#define BOOST_TEST_DYN_LINK
#include <boost/test/unit_test.hpp>
#include "SigView.hpp"
#include <fstream>
#include <string>
#include <stdio.h> // For the __cplusplus define
/*
These are the C++ standards and what value you should be able to expect in __cplusplus:
C++ pre-C++98: __cplusplus is 1.
C++98: __cplusplus is 199711L.
C++98 + TR1: This reads as C++98 and there is no way to check that I know of.
C++11: __cplusplus is 201103L.
C++14: __cplusplus is 201402L.
*/
BOOST_AUTO_TEST_CASE(RandomSystemTest)
{
BOOST_TEST_REQUIRE(__cplusplus == 201103L, "c++ dialect is " << __cplusplus);
}
テストケースには、以下を失敗し、出力:
fatal error: in "RandomSystemTest": c++ v is 199711
バージョンはまだ199711と表示されています。
私は違いを行っていない複数のフラグを試してみました:グラムの
c11
c++11
c++0x
gnu++11
バージョン++ = 4.8.4 Ubuntuのバージョン14.04.4 LTS
編集:
としては、の出力を要求しましたメイク:
$ make test
g++ --std=c++11 -Wall -Iinc -c test/Test_SigView.cpp -o build/Test_SigView.o 2> buildLog.txt
g++ --std=c++11 -Wall build/Test_E8b9b_encoder.o build/E8b9b.o build/Test_TransactionID.o build/TransactionID.o build/Test_SigView.o build/SigView.o -lboost_unit_test_framework \
-o build/Test.out 2> buildLog.txt
./build/Test.out
Running 11 test cases...
*** No errors detected
これで機能します。なぜ私は考えていない。私が行った唯一の違いは、g ++を実行することでした。-std = C++ 11 -dM -E -xC++/dev/null | @Dietrich Eppさんが提案したgrep __cplusplus
どこでも '$(A_OBJECT)'や '$(A_CFILE)'の定義はありません。 '%.o:%.cpp'またはこれに類するものを使用していない理由はありますか? –
私は単純化するための定義を省略しました。そうでなければ、プロジェクト内のすべてのファイルを定義し、各g ++呼び出しに追加しました。現時点では、%.o:と%.cppがそれらをどのように使用できるか理解できません。 –
おそらく、コンパイルとリンクのリストを表示するかもしれません。 –