如何根据平台(Linux与OS X)修改GNU makefile目标的依赖项和规则?

如何根据平台(Linux与OS X)修改GNU makefile目标的依赖项和规则?,makefile,conditional,gnu-make,Makefile,Conditional,Gnu Make,我有一个GNU makefile,其所有目标如下所示: .PHONY: all all: $(unittest++_tests_exe) $(cmockery_tests_exe) @echo Running UnitTest++ tests... @./$(unittest++_tests_exe) @echo Running Cmockery tests... @./$(cmockery_tests_exe) UnitTest++测试在Linux和Mac OS X上运行,而Cmoc

我有一个GNU makefile,其所有目标如下所示:

.PHONY: all
all: $(unittest++_tests_exe) $(cmockery_tests_exe)
 @echo Running UnitTest++ tests...
 @./$(unittest++_tests_exe)
 @echo Running Cmockery tests...
 @./$(cmockery_tests_exe)
UnitTest++测试在Linux和Mac OS X上运行,而Cmockery测试只在Linux上运行


我如何修改依赖项和规则,以便在Mac OS X上只生成和运行$unittest++\u tests\u exe?

我认为正确的方法是使用类似autoconf的东西

如果你想破解它,试着调用uname并将结果放入一个符号中。然后,您可以解析出触发我得出以下结论的相关部分:

ifeq ($(uname),Linux)
cmockery_tests_exe = cmockery_tests
else
cmockery_tests_exe = $()
endif

.PHONY: all
all: $(unittest++_tests_exe) $(cmockery_tests_exe)
 @echo Running UnitTest++ tests...
 @./$(unittest++_tests_exe)
ifeq ($(uname),Linux)
 @echo Running Cmockery tests...
 @./$(cmockery_tests_exe)
endif

这似乎有效,但我欢迎你的建议。

我想我很懒,这可以说是程序员的优点,但我有一个生成文件,它工作得很好,可读性很强。我没有任何autoconf的经验,这似乎不足以成为学习它的理由。有人知道为什么$uname不适合我,而$shell uname适合我吗?