Andrew Moa Blog Site

Ansa自定义参数和公式

1. 定义参数

ANSA的自定义参数比较简单,在输入框右键弹出菜单选择List variables,然后在A_PARAMETERs对话框中新建变量,并指派该变量名称就行了。

比如这里将材料参数指派为自定义参数:

  1. 右键选择变量列表

    1710a219-f3ec-4b94-8118-737a0de05c66

  2. 新建变量

    20853e89-e4cd-48b1-97b3-23e4842a6579

  3. 定义变量参数

    ccd6dee9-d580-4146-bfdb-cb96b268697f

  4. 指派变量

    535594dc-d382-4231-bfa3-bcde019c84a0

阅读时长1分钟
Andrew Moa

CPack打包程序依赖问题

之前用CPack打包QML程序的时候发现,CPack打包程序安装的文件和使用cmake install命令安装的文件存在明显的不同,下面解释并解决这个问题。

1. 问题代码

还是以之前编写的QML程序为例,为了方便改进代码将CMakeLists.txt改写如下,依赖安装和打包模块分别写入cmake/dependencies.cmakecmake/packaging.cmake

cmake_minimum_required(VERSION 3.21)
set(PROJECT_NAME sample)
project(${PROJECT_NAME} VERSION 0.1 LANGUAGES CXX)
set(EXECUTABLE_NAME ${PROJECT_NAME}_app)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

if(NOT $ENV{VCPKG_TARGET_TRIPLET} STREQUAL "")
  set(VCPKG_TARGET_TRIPLET $ENV{VCPKG_TARGET_TRIPLET})
  message(STATUS "VCPKG_TARGET_TRIPLET: ${VCPKG_TARGET_TRIPLET}")
  link_libraries("$ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/lib")
  message(STATUS "Link libraries from: $ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/$<$<CONFIG:Debug>:Debug>/lib")
  include_directories("$ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/include")
  message(STATUS "Include directories from: $ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/include")
  if(${VCPKG_TARGET_TRIPLET} MATCHES "static")
    set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/share/Qt6/qt.toolchain.cmake")
    message(STATUS "Using static Qt6 toolchain file: $ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/share/Qt6/qt.toolchain.cmake")
    set(Qt6_DIR "$ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/share/Qt6")
    message(STATUS "Using static Qt6_DIR: $ENV{VCPKG_ROOT}/installed/$ENV{VCPKG_TARGET_TRIPLET}/share/Qt6")
  endif()
endif()

find_package(Qt6 6.5 REQUIRED COMPONENTS Quick)

if(Qt6_FOUND)
    message(STATUS "Qt6 found: ${Qt6_DIR}")
else()
    message(FATAL_ERROR "Qt6 not found!")
endif()

qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(${EXECUTABLE_NAME}
    main.cpp
)
qt_add_qml_module(${EXECUTABLE_NAME}
    URI ${PROJECT_NAME}
    VERSION 1.0
    QML_FILES
    Main.qml
)

# set static linking for MSVC
if(MSVC AND (${VCPKG_TARGET_TRIPLET} MATCHES "static"))
    message(STATUS "Configuring for MSVC static linking")
    set_property(TARGET ${EXECUTABLE_NAME} PROPERTY
        MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
endif()

set_target_properties(${EXECUTABLE_NAME} PROPERTIES

    # MACOSX_BUNDLE_GUI_IDENTIFIER com.example.${EXECUTABLE_NAME}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

target_link_libraries(${EXECUTABLE_NAME}
    PRIVATE Qt6::Quick
)

include(GNUInstallDirs)
install(TARGETS ${EXECUTABLE_NAME}
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(MSVC AND (${VCPKG_TARGET_TRIPLET} MATCHES "static"))
    message(STATUS "Linking static MSVC runtime, skipping install of MSVC runtime DLLs")
else()
    message(STATUS "Configuring install of runtime dependencies")
    include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/dependencies.cmake)
endif()

include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/packaging.cmake)

cmake/dependencies.cmake模块定义了如何从qt安装路径中复制依赖带安装路径。

阅读时长4分钟
Andrew Moa

Ubuntu通过Docker运行macOS

最近由于开发需求,需要在macOS平台下测试和验证开发的应用。奈何手头上没有苹果电脑,又囊中羞涩。于是考虑在单位工作站上安装macOS虚拟机以解燃眉之急。

之前尝试了通过VirtualBox安装,无奈以失败告终。后来看到有大佬通过Docker安装macOS12,遂尝试下。

1. 安装Docker

通过以下命令安装Docker Engine。

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

需要确保宿主机上的KVM虚拟化已开启并已添加权限,运行以下命令。

sudo chmod 666 /dev/kvm

2. 拉取macOS镜像

运行以下命令拉取 dockurr/macos 镜像:

docker pull dockurr/macos

国内可以通过镜像地址加速3

docker pull docker.1ms.run/dockurr/macos

3. Docker运行权限问题

如果出现permission denied的问题,除了提权sudo运行外,可以将当前用户加入docker组内,重启后解决。

# 检查是否存在 Docker 用户组
cat /etc/group | grep docker
# 如果不存在,则创建 Docker 用户组
sudo groupadd docker
# 将当前用户添加到 Docker 用户组
sudo gpasswd -a $USER docker
# 更新用户组
newgrp docker

4. 运行 Docker 容器

使用以下命令启动 macOS 容器,可以将其保存为脚本方便调用。如果是国内使用镜像地址下载的话,记得把最后的dockurr/macos换成带镜像地址的链接,例如docker.1ms.run/dockurr/macos

阅读时长1分钟
Andrew Moa