如何编写CMakeLists.txt文件,以便CMake生成功能等同于
all: proj
debug: CXXFLAGS += -DDEBUG -g -Og
debug: proj
proj:
$(CXX) $(CXXFLAGS) main.cpp -o proj
换句话说,我希望能够在相同的文件夹中使用make [build_target]
构建相同的可执行文件,但这取决于构建目标,使用不同的标志。
目前我有
cmake_minimum_required(VERSION 3.12)
set(PROJ_NAME "proj")
project(${PROJ_NAME} CXX)
add_executable(${PROJ_NAME} main.cpp)
add_custom_target(debug)
target_compile_definitions(debug PUBLIC -DDEBUG -g -Og)
但是当我调用CMake时,我得到一个错误,说target_compile_definitions called with non-compilable target type
,我不知道如何使它“可编译”。
2条答案
按热度按时间qvtsj1bj1#
这不是CMake的设计用途。生成的构建系统中的目标被设计为具有一组稳定的编译选项(标志)。如果你想改变这些标志,需要重新生成buildsystem。从性能的Angular 来说,这通常是一件好事。我建议您只生成两个构建系统--一个用于调试,另一个用于其他任何功能(我假设发布?这是在CMake中使用单配置构建系统(与multi-config generators相反)时的惯用做法。
wvmv3b1j2#
通常,您可以通过更改配置来构建其他目标,或者为每个配置设置构建目录来实现这一点,也就是说,如果您没有使用多配置生成器的话。对于依赖于配置的选项,您可以使用生成器表达式,例如:
如果您想用不同的构建系统目标构建相同的源,则需要创建不同的cmake目标。
您可能需要更改输出名称,但对两个目标使用相同的输出文件路径会有问题,因此请确保将它们放在不同的目录中