gpt4 book ai didi

c++ - 从 CMake 中的自定义目标运行目标

转载 作者:太空宇宙 更新时间:2023-11-04 11:25:40 25 4
gpt4 key购买 nike

我有以下文件结构:

├── Generator/
│   ├── output/
│   └── script.py

└── FinalProgram/
├── build/
├── src/
│   └── main.cpp
├── include/
│   └── MyClass.h
└── CMakeLists.txt

Generator/script.py file 是在 Generator/output 中生成 c++ 文件的脚本文件夹。该脚本可以使用两个不同的参数(SimA 和 SimB)启动,每个参数生成一组不同的文件。

另一方面,FinalProgram需要使用那组生成的文件,所以每次我想编译 FinalProgramSimA一组文件,我必须

cd Generator 
./script.py SimA
cp output/*.cpp ../FinalProgram/src
cp output/*.h ../FinalProgram/include
cd ../FinalProgram/build && cmake ..
make

我想要的是能够打字

make SimA

或者

make SimB

所以一切都会自动发生。在这两种情况下,可执行文件必须相同,所以显然我不能有两个不同的 add_executable block 。我想我应该创建两个 add_custom_target block ,每个可能的值一个,在那里完成所有工作,最后调用编译所有内容的目标。因此,真正的问题是,如何从 add_custom_target 中运行另一个目标?堵塞?当然,我想我可以使用

COMMAND make

但是那个……让我哭了。有没有更好的办法?

最佳答案

正如 MadScienceDreams 提到的,您可以使用 add_custom_command 生成 c++ 文件,然后您可以在 add_executable 命令中使用生成的文件。

add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/../Generator/output/SimA.cpp
COMMAND ${PYTHON_EXECUTABLE} script.py SimA
DEPENDS ${CMAKE_SOURCE_DIR}/../Generator/script.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/../Generator)

set_property(SOURCE ${CMAKE_SOURCE_DIR}/../Generator/output/SimA.cpp PROPERTY GENERATED TRUE)

add_executable(SimA ${CMAKE_SOURCE_DIR}/../Generator/output/SimA.cpp ...)

add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/../Generator/output/SimB.cpp
COMMAND ${PYTHON_EXECUTABLE} script.py SimB
DEPENDS ${CMAKE_SOURCE_DIR}/../Generator/script.py
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/../Generator)

set_property(SOURCE ${CMAKE_SOURCE_DIR}/../Generator/output/SimB.cpp PROPERTY GENERATED TRUE)

add_executable(SimB ${CMAKE_SOURCE_DIR}/../Generator/output/SimB.cpp ...)

更多信息见

关于c++ - 从 CMake 中的自定义目标运行目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com