Makefile,根据操作系统修改命令

时间:2020-04-18 21:49:05

标签: c++ linux makefile conditional-compilation

阅读了this问题后,我写了一个以以下内容开头的Makefile

CXX=g++
CXXFLAGS= -std=c++17  -Wall -O3 -g

ifeq ( $( shell uname ), "Linux" )
CXXFLAGS += -fopenmp
endif


LIBS= -pthread
INCLUDES = -I.
TARGETS= my targets...

仅当我在linux上编译时才需要传递-fopenmp标志,而在Mac上则不需要。

我的问题是,这不起作用,并且标志永远不会通过。

1 个答案:

答案 0 :(得分:2)

gmake的语法对空格(特别是gmake宏)非常敏感。此外,uname的输出不包含引号。

这应该是:

CXX=g++
CXXFLAGS= -std=c++17  -Wall -O3 -g

ifeq ($(shell uname),Linux)
CXXFLAGS += -fopenmp
endif

zz:
    echo $(CXXFLAGS)

结果:

$ make zz
echo -std=c++17  -Wall -O3 -g -fopenmp
-std=c++17 -Wall -O3 -g -fopenmp
相关问题