我有以下文件结构:
├── Generator/
│ ├── output/
│ └── script.py
│
└── FinalProgram/
├── build/
├── src/
│ └── main.cpp
├── include/
│ └── MyClass.h
└── CMakeLists.txt
Generator/script.py
文件是在Generator/output
文件夹中生成c ++文件的脚本。该脚本可以使用两个不同的参数(SimA和SimB)启动,每个参数生成一组不同的文件。
另一方面,FinalProgram
需要使用那组生成的文件,因此每次我想用FinalProgram
文件集编译SimA
时,我都必须
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
块。我想我应该创建两个add_custom_target
块,每个可能的值一个,在那里完成所有工作,最后调用编译所有内容的目标。因此,真正的问题是,如何在add_custom_target
块内运行另一个目标?当然,我想我可以使用
COMMAND make
但那......让我哭泣。是不是有更好的方法?
答案 0 :(得分:1)
正如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 ...)
有关详细信息,请参阅