通过 Make 在 C++ 中选择性编译

问题描述 投票:0回答:1

我正在尝试修改预制的 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 和类似的方法。我使用了其他变量和过滤方法来防止编译。

c++ makefile compilation
1个回答
0
投票

在 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
中的值。

© www.soinside.com 2019 - 2024. All rights reserved.