通过传递命令行参数在CMake中进行选择性编译

时间:2018-07-24 01:51:51

标签: makefile cmake

我有三个程序,例如:program_1.cppprogram_2.cppprogram_3.cpp

到目前为止,我有单独的makefile来构建这些程序。

我想通过以下方式实现。

cmake "program_1"   # program_1.cpp has to compile
cmake "program_2"   # program_2.cpp has to compile
cmake "program_3"   # program_3.cpp has to compile

您能建议我实现这一目标的方法吗?


[更新]:

我正在使用Shell脚本来编译程序。 例如

bash build_script.sh build 

这将编译文件program_1.cpp并生成可执行文件。

我将以相同的方式实施以下方法。

bash build_script.sh build program_1 -- build program_1.cpp
bash build_script.sh build program_2 -- build program_2.cpp
bash build_script.sh build program_3 -- build program_3.cpp

2 个答案:

答案 0 :(得分:3)

在生成makefile时,cmake会为每个add_executable()调用创建一个make目标,因此仅需在由cmake生成的makefile上使用make target

CMakeLists.txt:

...
add_executable(program_1 prog1.cpp)
add_executable(program_2 prog2.cpp)
add_executable(program_3 prog3.cpp)

然后是时候构建:

cmake path/to/source/dir
make program_1

答案 1 :(得分:2)

假设您要编译三个不同的目标,则可以有一个简单的makefile:

.PHONY program_1:
program_1:
    gcc -o program_1 program_1.cpp

.PHONY program_2:
program_2:
    gcc -o program_2 program_2.cpp

.PHONY program_3:
program_3:
    gcc -o program_3 program_3.cpp

然后您可以简单地做到:

make program_2

仅编译program_2。但是,这与cmake无关。