快速编译新案例

编译方法

如果项目根目录没有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