linux make java版本,告訴make是否在Windows或Linux上運行

更新請閱讀這個類似但更好的答案:https://stackoverflow.com/a/14777895/938111

make (和 gcc )可以使用Cygwin或MinGW在MS-Windows上輕松安裝 .

正如@ldigas所說, make 可以使用 UNAME:=$(shell uname) 檢測平臺(命令 uname 也由Cygwin或MinGW安裝程序安裝) .

下面,我提供了一個基于 make (和 gcc )的完整示例來解釋如何構建共享庫: *.so 或 *.dll ,具體取決于平臺 .

這個例子基本/簡單易于理解:-)

我們來看看五個文件:

├── app

│ └── Makefile

│ └── main.c

└── lib

└── Makefile

└── hello.h

└── hello.c

Makefiles

app/Makefile

app.exe: main.o

gcc -o $@ $^ -L../lib -lhello

# '-o $@' => output file => $@ = the target file (app.exe)

# ' $^' => no options => Link all depended files

# => $^ = main.o and other if any

# '-L../lib' => look for libraries in directory ../lib

# '-lhello => use shared library hello (libhello.so or hello.dll)

%.o: %.c

gcc -o $@ -c $< -I ../lib

# '-o $@' => output file => $@ = the target file (main.o)

# '-c $ COMPILE the first depended file (main.c)

# '-I ../lib' => look for headers (*.h) in directory ../lib

clean:

rm -f *.o *.so *.dll *.exe

lib/Makefile

UNAME := $(shell uname)

ifeq ($(UNAME), Linux)

TARGET = libhello.so

else

TARGET = hello.dll

endif

$(TARGET): hello.o

gcc -o $@ $^ -shared

# '-o $@' => output file => $@ = libhello.so or hello.dll

# ' $^' => no options => Link all depended files => $^ = hello.o

# '-shared' => generate shared library

%.o: %.c

gcc -o $@ -c $< -fPIC

# '-o $@' => output file => $@ = the target file (hello.o)

# '-c $ compile the first depended file (hello.c)

# '-fPIC' => Position-Independent Code (required for shared lib)

clean:

rm -f *.o *.so *.dll *.exe

源代碼

app/main.c

#include "hello.h" //hello()

#include //puts()

int main()

{

const char* str = hello();

puts(str);

}

lib/hello.h

#ifndef __HELLO_H__

#define __HELLO_H__

const char* hello();

#endif

lib/hello.c

#include "hello.h"

const char* hello()

{

return "hello";

}

構建

修復 Makefiles copy(通過制表替換前導空格) .

> sed -i 's/^ */\t/' */Makefile

兩個平臺上的 make 命令相同 . 這是MS-Windows上的輸出(刪除了不必要的行) .

> cd lib

> make clean

> make

gcc -o hello.o -c hello.c -fPIC

gcc -o hello.dll hello.o -shared

> cd ../app

> make clean

> make

gcc -o main.o -c main.c -I ../lib

gcc -o app.exe main.o -L../lib -lhello

跑步

應用程序需要知道共享庫的位置 .

在MS-Windows上,簡單/基本/愚蠢的方法是復制應用程序所在的庫:

> cp -v lib/hello.dll app

`lib/hello.dll' -> `app/hello.dll'

在Linux上,使用 LD_LIBRARY_PATH 環境變量:

> export LD_LIBRARY_PATH=lib

兩個平臺上的運行命令行和輸出相同:

> app/app.exe

hello

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397547.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MPI多機器實現并行計算

最近使用一個系統的分布式版本搭建測試環境&#xff0c;該系統是基于MPI實現的并行計算&#xff0c;MPI是傳統基于msg的系統&#xff0c;這個框架非常靈活&#xff0c;對程序的結構沒有太多約束&#xff0c;高效實用簡單&#xff0c;下面是MPI在多臺機器上實現并行計算的過程。…

Jenkins_獲取源碼編譯并啟動服務(二)

一、創建Maven項目二、設置SVN信息三、設置構建觸發器四、設置Maven命令五、設置構建后發郵件信息&#xff08;參考文章一&#xff09;六、設置構建后拷貝文件到遠程機器并執行命令來自為知筆記(Wiz)

php 判斷頁面加載完,所有ajax執行完且頁面加載完判斷

jquery ajax&load 方法導致 js效果不顯示或顯示后由于加載后ajax 重新布局頁面導致效果錯誤。解決思路&#xff1a;需要在ajax get post 或 load 等執行完后再去執行方法就不會由于他們沒執行完導致的最終錯誤。那么首先看load 方法定義&#xff1a;jQuery ajax - load() 方…

正確理解ThreadLocal

想必很多朋友對 ThreadLocal并不陌生&#xff0c;今天我們就來一起探討下ThreadLocal的使用方法和實現原理。首先&#xff0c;本文先談一下對ThreadLocal的理 解&#xff0c;然后根據ThreadLocal類的源碼分析了其實現原理和使用需要注意的地方&#xff0c;最后給出了兩個應用場…

2018.7.10 個人博客文章=利用ORM創建分類和ORM的內置函數

昨天的注冊收尾工作 其實就差了和MySql聯系起來的部分&#xff0c;這部分很簡單&#xff0c;首先要做的就是保存用戶通過from傳送過來的頭像文件&#xff1a; """ 保存頭像文件 """ file request.FILES.get(avatar) file_path os.path.join(st…

python 列表與元組的操作簡介

上一篇&#xff1a;Python 序列通用操作介紹 列表 列表是可變的(mutable)——可以改變列表的內容&#xff0c;這不同于字符串和元組&#xff0c;字符串和元組都是不可變的。接下來討論一下列表所提供的方法。 list函數 可以使用list函數來創建列表&#xff1a; list(Hello) [H,…

mfc嵌入matlab繪圖窗口,將matlab的圖嵌入MFC

【實例簡介】VS調用matlab畫圖模塊編譯成的動態鏈接庫&#xff0c;并在MFC顯示。【實例截圖】【核心代碼】3b0582a3-4ea8-4a61-ba33-e448be563b88└── 將matlab的圖嵌入MFC├── matlab_2010b與VS2008_混合編程的實現.pdf├── TestWithData│ ├── Debug│ │ ├─…

python multiprocessing 和tcp

#用類方法 服務端from socket import *from multiprocessing import Processimport osclass Myprocess(Process): def __init__(self, conn): self.conn conn super().__init__() def run(self): conn self.conn start True whil…

matlab 畫三維花瓶,精美花瓶建模教程

1、首先&#xff0c;草圖單位為mm&#xff0c;進入前視圖繪制如圖草圖&#xff0c;花瓶的基本形狀輪廓2、然后對草圖進行旋轉3、旋轉出曲面后&#xff0c;在頂部邊線新建一個基準面4、繼續在前視圖繪制草圖&#xff0c;如圖繪制一弧線5、然后進行旋轉6、可以得到圖示的兩個曲面…

PKI系統相關知識點介紹

公鑰基礎設施&#xff08;Public Key Infrastructure&#xff0c;簡稱PKI&#xff09;是目前網絡安全建設的基礎與核心&#xff0c;是電子商務安全實施的基本保障&#xff0c;因此&#xff0c;對PKI技術的研究和開發成為目前信息安全領域的熱點。本文對PKI技術進行了全面的分析…

android 打印java堆棧,Android打印堆棧

java打印堆棧方法一&#xff1a;異常對象打印堆棧Exception e new Exception("this is a log");e.printStackTrace();方法二&#xff1a;Log打印獲取異常的堆棧并打印Log.e(“dump_test”,Log.getStackTraceString(new Throwable()));C\C打印堆棧方法一&#xff1a;…

實際算法項目工程上手日志C/C++

#pragma once 為了保證頭文件只被編譯一次&#xff0c;通常放在頭文件的頂部 #define IN #define OUT #define INOUT 這個只在邏輯上起作用&#xff0c; IN 表示輸入參數&#xff0c;指針指向的值不會修改&#xff1b; OUT 表示輸出參數&#xff0c;指針指向的值會修改&a…

Arduino 控制超聲波測距模塊

一.實物圖 二.例子代碼 用到數字2 和3 引腳,還有兩個就是vcc GND兩個陰腳,用模塊連線比較簡單 轉載于:https://www.cnblogs.com/caoguo/p/4785700.html

Linux安裝source-code-pro字體

2019獨角獸企業重金招聘Python工程師標準>>> 1.下載source-code-pro字體 從GitHub下載 https://github.com/adobe-fonts/source-code-pro/releases 2.解壓文件&#xff0c;將OTF格式的文件夾重新命名一下&#xff0c;這里我命名為source-code-pro&#xff0c;然后將…

dft對稱性 matlab實驗,數字信號處理實驗指導書(審)

(0???2?)上對X(ej?)均勻采樣得到?X(k)?X(ej?)??2?k/N??n???x(n)e?j2?kn/N 0?k?N?1可以看到X(k)也是頻域上的有限長序列&#xff0c;長度為N。序列X(k)稱為序列x(n)的N點DFT。N稱為DFT變換區間長度。 通常表示WN?e?j2?/N可將定義式表示為?X(k)??x(n)…

PI

并不是所有東西都可以套PI的&#xff0c;只有滿足上述這類的數學關系才可以。 轉速經過PI調節得到電流也是有原因的。從下圖中可以發現&#xff0c;轉速 k*Iq/s&#xff0c;s是拉普拉斯算子&#xff0c;所以也是滿足積分&#xff0c;比例關系的。 轉載于:https://www.cnblogs.…

AOP之AspectJ簡單使用

為什么80%的碼農都做不了架構師&#xff1f;>>> 參考文章&#xff1a; 使用AspectJ在Android中實現Aop 深入理解Android之AOP自動打印日志主要知識點&#xff1a; 主要是JPoint、pointcuts、advice以及他們之間的關系可以通過aj文件、或AspectJ注解的Java文件實現A…

matlab drawnow連成曲線,precision recall曲線Matlab實現

在用哈希進行檢索時&#xff0c;常會用到precision recall曲線對其性能進行定量評價。precision recall的定義在信息檢索評價指標中已做了詳細說明&#xff0c;這里再記錄一下precision recall的具體實現。precision recall曲線matlab一般使用的都是下面的版本&#xff1a;func…

trap

http://blog.csdn.net/elbort/article/details/8525599 http://mywiki.wooledge.org/SignalTrap轉載于:https://www.cnblogs.com/flowjacky/p/4785723.html

WinSCP實現Ubuntu與 Windows 文件共享方法

2019獨角獸企業重金招聘Python工程師標準>>> WinSCP是一個Windows環境下使用SSH的開源圖形化SFTP客戶端。同時支持SCP協議。它的主要功能就是在本地與遠程計算機間安全的復制文件。WinSCP綠色中文版 一款基于SSH安全高效的FTP上傳軟件。WinSCP 可以執行所有基本的文…