允许在cmake生成时进行内联程序集

x4shl7ld  于 2022-12-29  发布在  其他
关注(0)|答案(1)|浏览(139)

我正在尝试使用cmake构建exe,但此项目https://github.com/cyberquarks/fubi没有IDE
这是cmake文件:

cmake_minimum_required(VERSION 3.10)
project(Fubi)

set(SOURCES DbgHelpDll.cpp Fubi.cpp SysExports.cpp fubimain.cpp stdafx.cpp)
add_executable(Fubi ${SOURCES})
target_link_libraries(Fubi PRIVATE DbgHelp)

set_property(TARGET Fubi PROPERTY ENTRY_POINT "fubimain.cpp")

include_directories("C:/local/boost_1_73_0")
link_directories(C:/local/boost_1_73_0/lib64-msvc-14.2)

set(CMAKE_SYSTEM_VERSION 6.0)

当我构建它时:

$ mkdir build
$ cd build
$ cmake -G "Visual Studio 16 2019" ..
$ cmake --build .

在构建过程中,它会抛出以下错误:

Fubi.cpp
C:\fubi\Fubi.cpp(40,5): error C4235: nonstandard extension used: '__asm' keyword not supported on this architecture [C:\fubi\build\Fubi.vcxproj]

代码是:

DWORD Fubi::Call_cdecl( const void* args, size_t sz, DWORD func )
{
    DWORD rc;               
    __asm
    {
    // ...
    }
    return ( rc );
}

如何使用cmake构建可执行文件并允许内联汇编代码也进行编译?
更新:
当使用CLion IDE构建和运行该项目时,同样的项目也可以正常工作。
工具链:

调试配置:

Cmake设置:

运行配置:

px9o7tmv

px9o7tmv1#

使用ChatGPT解决问题:

要使用CMake在32位模式下构建项目,可以使用-A选项指定体系结构。例如:

cmake -A Win32

还可以在CMakeLists.txt文件中设置CMAKE_GENERATOR_PLATFORM变量以指定体系结构。例如:

set(CMAKE_GENERATOR_PLATFORM x86)

或者,可以使用-G选项指定生成器的32位版本。例如,若要使用32位版本的Visual Studio,可以将-G“Visual Studio 16 2019”与-A Win32选项一起使用。
请注意,您可能需要在CMakeLists.txt文件中指定其他选项或变量,以确保在32位模式下生成项目。例如,您可能需要设置CMAKE_CXX_FLAGS变量以包括/m32标志,从而指定32位模式。
还值得注意的是,某些生成器可能不支持在32位模式下生成。在这种情况下,您可能需要使用不同的生成器或工具链来在32位模式下生成项目。

相关问题