Skip to content

Commit 511c4c4

Browse files
committed
简化编译步骤,更新依赖
1 parent 934bcd4 commit 511c4c4

File tree

7 files changed

+195
-108
lines changed

7 files changed

+195
-108
lines changed

README.md

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,18 @@ scoop install wzv5/regex-tool
3535

3636
## 编译
3737

38-
安装 rust,并安装依赖:
38+
安装 rust,然后使用 cmake 编译。
3939

40-
``` bash
41-
cargo install cxxbridge-cmd
42-
```
43-
44-
之后直接使用 cmake 编译即可。
40+
Windows 编译示例:
4541

46-
Windows 平台或许需要设置 `CMAKE_PREFIX_PATH`,添加 Qt 库的相关路径,如 `-DCMAKE_PREFIX_PATH=D:/Qt/6.0.0/msvc2019_64`
42+
```shell
43+
git clone https://github.com/wzv5/regex_tool
44+
cd regex_tool
45+
mkdir build
46+
cd build
47+
cmake .. -G 'Visual Studio 17 2022' -DQt6_ROOT=D:\Qt\6.6.0\msvc2019_64
48+
cmake --build . --config Release
49+
```
4750

4851
## 已知问题
4952

regex_engine/CMakeLists.txt

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,26 @@
11
find_program(CARGO cargo REQUIRED PATHS $ENV{HOME}/.cargo/bin)
22
message(STATUS "Using cargo: ${CARGO}")
33

4-
find_program(CXXBRIDGE cxxbridge REQUIRED PATHS $ENV{HOME}/.cargo/bin)
5-
message(STATUS "Using cxxbridge: ${CXXBRIDGE}")
4+
set(CARGO_TARGET_DIR ${CMAKE_CURRENT_BINARY_DIR}/target)
5+
set(CARGO_PROFILE $<IF:$<CONFIG:Debug>,debug,release>)
6+
set(CXXBRIDGE_DIR ${CARGO_TARGET_DIR}/cxxbridge/regex_engine/src)
7+
set(CXXBRIDGE_CC ${CXXBRIDGE_DIR}/cppbridge.rs.cc)
68

7-
add_custom_target(regex_engine_target ALL
8-
COMMAND ${CARGO} build --release --target-dir ${CMAKE_CURRENT_BINARY_DIR}
9+
add_custom_target(cargo_build_target
10+
COMMAND ${CARGO} build $<$<NOT:$<CONFIG:Debug>>:--release> --target-dir ${CARGO_TARGET_DIR}
911
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
10-
COMMENT "Runing cargo build"
11-
)
12-
13-
set(cxxbridge_in ${CMAKE_CURRENT_SOURCE_DIR}/src/cppbridge.rs)
14-
set(cxxbridge_source_out ${CMAKE_CURRENT_BINARY_DIR}/bridge.cpp)
15-
set(cxxbridge_header_out ${CMAKE_CURRENT_BINARY_DIR}/bridge.h)
16-
17-
add_custom_command(
18-
OUTPUT ${cxxbridge_source_out} ${cxxbridge_header_out}
19-
COMMAND ${CXXBRIDGE} ${cxxbridge_in} ${cxxbridge_args} --header --output ${cxxbridge_header_out}
20-
COMMAND ${CXXBRIDGE} ${cxxbridge_in} ${cxxbridge_args} --output ${cxxbridge_source_out}
21-
COMMENT "Generating CXX Bridge: ${cxxbridge_header_out} ${cxxbridge_source_out}"
22-
DEPENDS ${cxxbridge_in}
12+
BYPRODUCTS ${CXXBRIDGE_CC}
2313
)
2414

2515
if (WIN32)
26-
set(RUST_DEPEND ws2_32 userenv advapi32 bcrypt)
16+
set(RUST_DEPEND ntdll ws2_32 userenv advapi32 bcrypt)
2717
else()
2818
set(RUST_DEPEND pthread m dl)
2919
endif()
3020

31-
add_library(bridge STATIC ${cxxbridge_source_out})
32-
add_dependencies(bridge regex_engine_target)
33-
target_link_directories(bridge PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/release)
34-
target_include_directories(bridge PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
21+
add_library(bridge STATIC ${CXXBRIDGE_CC})
22+
add_dependencies(bridge cargo_build_target)
23+
target_link_directories(bridge PUBLIC ${CARGO_TARGET_DIR}/${CARGO_PROFILE})
24+
target_include_directories(bridge PUBLIC ${CXXBRIDGE_DIR})
3525
target_link_libraries(bridge PUBLIC regex_engine ${RUST_DEPEND})
26+
set_target_properties(bridge PROPERTIES ADDITIONAL_CLEAN_FILES ${CARGO_TARGET_DIR})

regex_engine/Cargo.lock

Lines changed: 136 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

regex_engine/Cargo.toml

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,16 @@
22
name = "regex_engine"
33
version = "0.1.0"
44
authors = ["wzv5 <[email protected]>"]
5-
edition = "2018"
6-
7-
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
5+
edition = "2021"
86

97
[lib]
10-
name = "regex_engine"
118
crate-type = ["staticlib"]
129

1310
[dependencies]
14-
regex-syntax = "0.6"
15-
regex = "1.5"
16-
anyhow = "1.0"
17-
cxx = "1.0"
11+
regex-syntax = "0.8.2"
12+
regex = "1.10.2"
13+
anyhow = "1.0.75"
14+
cxx = "1.0.110"
1815

19-
[profile.release]
20-
panic = "abort"
21-
lto = true
22-
codegen-units = 1
16+
[build-dependencies]
17+
cxx-build = "1.0.110"

regex_engine/build.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
fn main() {
2+
let _ = cxx_build::bridge("src/cppbridge.rs");
3+
println!("cargo:rerun-if-changed=src/cppbridge.rs");
4+
}

0 commit comments

Comments
 (0)