我是新手。我正在开发一个 C++ 共享库,我希望它可以选择在支持或不支持特定功能(代码块)的情况下进行编译。换句话说,我如何让用户选择是否通过(可能)将参数传递给 make 命令来编译具有该功能的库?
例如,我需要用户能够做到这一点:
make --with-feature-x
我该怎么做呢?例如,我是否需要编写配置文件?或者我可以直接在我的 Makefile 中执行此操作吗?
我是新手。我正在开发一个 C++ 共享库,我希望它可以选择在支持或不支持特定功能(代码块)的情况下进行编译。换句话说,我如何让用户选择是否通过(可能)将参数传递给 make 命令来编译具有该功能的库?
例如,我需要用户能够做到这一点:
make --with-feature-x
我该怎么做呢?例如,我是否需要编写配置文件?或者我可以直接在我的 Makefile 中执行此操作吗?
我相信以下方式应该有效。运行时定义环境变量make
。在 Makefile 中,您检查环境变量的状态。根据状态,您定义在编译代码时将传递给 g++ 的选项。g++ 使用预处理阶段的选项来决定在文件中包含什么(例如 source.cpp)。
make FEATURE=1
ifeq ($(FEATURE), 1) #at this point, the makefile checks if FEATURE is enabled
OPTS = -DINCLUDE_FEATURE #variable passed to g++
endif
object:
g++ $(OPTS) source.cpp -o executable //OPTS may contain -DINCLUDE_FEATURE
#ifdef INCLUDE_FEATURE
#include feature.h
//functions that get compiled when feature is enabled
void FeatureFunction1() {
//blah
}
void FeatureFunction2() {
//blah
}
#endif
检查 FEATURE 是否传入(作为任何值):
ifdef FEATURE
#do something based on it
else
# feature is not defined. Maybe set it to default value
FEATURE=0
endif