快速编译新案例
编译方法
如果项目根目录没有user_examples(v1.2.1-sycl没有),建立user_examples,并把master分支的user_examples/CMakeLists.txt拷贝过来。
拷贝一个tests中的案例到user_examples,例如:
cd user_examples
cp ../2d_examples/test_2d_elastic_gate -r jsm_2d_elastic_gate然后在build目录增量构建(无需清理build目录),也就是重复运行一遍cmake:
cd ../../build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_C_COMPILER_LAUNCHER=ccache -D CMAKE_CXX_COMPILER_LAUNCHER=ccache -DSPHINXSYS_BUILD_USER_EXAMPLES=ON -S ..然后只编译新案例的可执行文件jsm_2d_elastic_gate:
make jsm_2d_elastic_gate以下是终端的输出:
[jsm@server build]$ make jsm_2d_elastic_gate
[100%] Built target sphinxsys_2d
[100%] Building CXX object tests/user_examples/jsm_2d_elastic_gate/CMakeFiles/jsm_2d_elastic_gate.dir/elastic_gate.cpp.o
[100%] Linking CXX executable bin/jsm_2d_elastic_gate
/opt/gcc-13.4.0/bin/g++ -O3 -DNDEBUG -Wl,--dependency-file,CMakeFiles/jsm_2d_elastic_gate.dir/link.d CMakeFiles/jsm_2d_elastic_gate.dir/elastic_gate.cpp.o -o bin/jsm_2d_elastic_gate -Wl,-rpath,/opt/sphinxsys-soft/Simbody-3.7/lib64:/opt/OpenBLAS/lib:/opt/sphinxsys-soft/oneTBB-2022.3.0/lib64:/opt/sphinxsys-soft/Boost-1.88.0/lib ../../../src/libsphinxsys_2d.a /opt/sphinxsys-soft/Simbody-3.7/lib64/libSimTKsimbody.so.3.7 /opt/sphinxsys-soft/Simbody-3.7/lib64/libSimTKmath.so.3.7 /opt/sphinxsys-soft/Simbody-3.7/lib64/libSimTKcommon.so.3.7 /opt/OpenBLAS/lib/libopenblas.so -lm -ldl -lpthread -lrt -ldl -lm /opt/sphinxsys-soft/oneTBB-2022.3.0/lib64/libtbb.so.12.17 /opt/sphinxsys-soft/oneTBB-2022.3.0/lib64/libtbbmalloc.so.2.17 /opt/sphinxsys-soft/Boost-1.88.0/lib/libboost_program_options.so.1.88.0 /opt/sphinxsys-soft/googletest-1.17.0/lib64/libgtest_main.a /opt/sphinxsys-soft/googletest-1.17.0/lib64/libgtest.a -lpthread
[100%] Built target jsm_2d_elastic_gate如果要写一个全新的案例,需要自己写CMakeLists.txt。先学习案例的CMakeLists.txt是怎么写的。
案例CMakeLists注解
以tests\2d_examples\test_2d_dambreak为例。
全局变量含义:
CMAKE_MODULE_PATH
CMake 查找模块(include()/find_package()等)时的额外搜索路径列表(分号分隔)
...;SPHinXsys-v.1.2.1-sycl/cmake(本例在子目录里又追加了一次,可能出现重复)
CMAKE_SOURCE_DIR
顶层源码目录(你从哪里作为“顶层工程”执行 cmake -S)
SPHinXsys-v.1.2.1-sycl
CMAKE_CURRENT_SOURCE_DIR
当前处理的CMakeLists.txt所在的源码目录
SPHinXsys-v.1.2.1-sycl/tests/2d_examples/test_2d_dambreak
PROJECT_BINARY_DIR
当前project(...)对应的构建目录(本工程是 out-of-source build,因此在 build 目录下)
SPHinXsys-v.1.2.1-sycl/build/tests/2d_examples/test_2d_dambreak
CMAKE_CURRENT_BINARY_DIR
案例build路径
build/tests/user_examples/jsm_2d_dambreak
LIBRARY_OUTPUT_PATH
(旧式变量)本案例生成的库文件输出目录
SPHinXsys-v.1.2.1-sycl/build/tests/2d_examples/test_2d_dambreak/lib
EXECUTABLE_OUTPUT_PATH
(旧式变量)本案例生成的可执行文件输出目录
SPHinXsys-v.1.2.1-sycl/build/tests/2d_examples/test_2d_dambreak/bin/
CMAKE_COMMAND
CMake 可执行程序路径(用于cmake -E ...这类命令)
例如:/usr/bin/cmake(或你的环境中实际的 cmake 路径)
PROJECT_NAME
当前project(...)的工程名;本例被设置为“当前文件夹名”,也用作target名
test_2d_dambreak
tests\2d_examples\test_2d_dambreak\CMakeLists.txt:
更现代的CMakeLists
让GPT-5.2仿照案例的CMakeLists,帮我改了一个更现代的版本。这里没有ctest测试了。
linux平台简洁版本(无regression_test_tool):
Last updated