我正在尝试修改预制的 makefile 以防止编译某些指定的文件和目录。如果我想阻止文件“src/values.cpp”编译和目录“src/data/”编译,我该如何处理?
以下是编译规则(对谁有帮助,如果还需要其他数据请告诉我):
PS:这是来自 PROS Code for Vex 的 makefile,供那些想了解的人使用。
define c_rule
$(BINDIR)/%.$1.o: $(SRCDIR)/%.$1
$(BINDIR)/%.$1.o: $(SRCDIR)/%.$1 $(DEPDIR)/$(basename $1).d
$(VV)mkdir -p $$(dir $$@)
$(MAKEDEPFOLDER)
$$(call test_output_2,Compiled $$< ,$(CC) -c $(INCLUDE) -iquote"$(INCDIR)/$$(dir $$*)" $(CFLAGS) $(EXTRA_CFLAGS) $(DEPFLAGS) -o $$@ $$<,$(OK_STRING))
$(RENAMEDEPENDENCYFILE)
endef
$(foreach cext,$(CEXTS),$(eval $(call c_rule,$(cext))))
define cxx_rule
$(BINDIR)/%.$1.o: $(SRCDIR)/%.$1
$(BINDIR)/%.$1.o: $(SRCDIR)/%.$1 $(DEPDIR)/$(basename %).d
$(VV)mkdir -p $$(dir $$@)
$(MAKEDEPFOLDER)
$$(call test_output_2,Compiled $$< ,$(CXX) -c $(INCLUDE) -iquote"$(INCDIR)/$$(dir $$*)" $(CXXFLAGS) $(EXTRA_CXXFLAGS) $(DEPFLAGS) -o $$@ $$<,$(OK_STRING))
$(RENAMEDEPENDENCYFILE)
endef
$(foreach cxxext,$(CXXEXTS),$(eval $(call cxx_rule,$(cxxext))))
我尝试过使用 EXCLUDE_SRC_FROM_COMPLIATION 和类似的方法。我使用了其他变量和过滤方法来防止编译。
在 CMake 中,可选择包含/排除项目某些部分的标准方法是使用 options。
在您的情况下,要在编译中包含其他文件,可能如下所示:
option(COMPILE_VALUES "Include values.cpp in the library sources" OFF)
set(MY_SRC
xxx.cpp
yyy.cpp
zzz.cpp
)
if (COMPILE_VALUES)
list(APPEND MY_SRC values.cpp)
endif()
与添加/排除目录类似:
if (USE_DATA)
add_subdirectory(data)
endif()
选项值可以在项目配置期间使用
cmake -DMY_OPTION=ON [other flags] ../
进行切换,或者使用 ccmake 进行切换,或者直接更改 CMakeLists.txt
中的值。