使用 CPP 和 ASM 的 CMake 项目

CMake project with CPP and ASM

尝试在CPP中制作带有外部ASM功能的hello world工程

CMakeLists.txt

cmake_minimum_required(VERSION 3.11)

project(TestProject VERSION 0.1 LANGUAGES CXX ASM)

set_property(SOURCE foo.s APPEND PROPERTY COMPILE_OPTIONS "-x" "assembler-with-cpp")

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

add_executable(TestProject main.cpp foo.s)

target_include_directories(TestProject PUBLIC
              "${PROJECT_BINARY_DIR}"
              )

foo.s

.text
.globl _foo
_foo:
add %esi, %edi // add x and y
mov %edi, %eax // move result to correct register for return value
ret

main.cpp

#include <iostream>

using namespace std;

int foo(int x, int y);

int main() {
  int result = foo(100, 200);
  cout << result << endl;
}

我可以为我的 IDE 成功生成项目

cmake .. -G Xcode

如果我在 IDE 中构建它,我会收到此错误:

Error 
Undefined symbol: foo(int, int)

如果我尝试从终端构建

cmake --build ..

我在 CMakeCache.txt 中遇到错误:

Error: could not load cache

CPP(仅限)项目在机器上构建良好。 假设生成的有问题CMakeCache.txt但是可以得到

CMakeCache.txt: https://pastebin.com/BSbZfA67

您已声明 foo 具有 C++ 链接,但将其定义为具有 C 链接。要解决此问题,请声明 foo 改为使用 C 链接:

extern "C" int foo(int x, int y);